回 帖 发 新 帖 刷新版面

主题:这道题我为什么错了?

题目:http://acm.pku.edu.cn/JudgeOnline/problem?id=1006
#include<stdio.h>
#define MAX 5000
int main()
{
 int p[MAX],i[MAX],e[MAX],d[MAX],x[MAX],j=-1,k,a,c;
 do
 {
     j++;
     scanf("%d %d %d %d",&p[j],&i[j],&e[j],&d[j]);
  }while(p[j]>-1&&i[j]>-1&&e[j]>-1&&d[j]>-1);
 for(k=0;k<j;k++)
 {
     x[k]=0;
  for(a=0;a<=28;a++)
  {
   if(((23*a)%28+(p[k]-i[k])%28)%28==0)
    {
      x[k]=23*a+x[k];
      break;
     }
    }
  for(c=0;c<=33;c++)
   if(((23*(a+28*c))%33+(p[k]-e[k])%33)%33==0)
   {
     x[k]=23*(a+28*c)+p[k];
     break;
    }
  x[k]=x[k]-d[k];
 }
 for(k=0;k<j;k++)
 {
     if(x[k]<=0)
         x[k]+=21252;
     printf("Case %d: the next triple peak occurs in %d days.\n",k+1,x[k]);
 }
 return 0;
}

回复列表 (共3个回复)

沙发

麻烦你把题目翻译一下,纯英文的看不懂

板凳

http://acm.pku.edu.cn/JudgeOnline/problem?id=1006是纯英文的,看起来太费力了

3 楼

这题用中国剩余定理可以,其实直接循环求也可以的。我的通过的代码如下:
#include<iostream>

using namespace std;

int main()
{
    int p,e,i,d;
    int n=1;
    while (cin>>p>>e>>i>>d)
    {
        if (p==-1 && e==-1 && i==-1 && d==-1) break;
        int j;
        for (j=1;;j++)
            if ((d+j-i)%33==0) break;
        for (;;j+=33)
            if ((d+j-p)%23==0 && (d+j-e)%28==0) break;
        cout<<"Case "<<n++<<": the next triple peak occurs in "<<j<<" days."<<endl;
    }
    return 0;
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册