开始的问题代码,不能过,效率低
#include <iostream>
using namespace std;
int main()
{ int p,e,i,d,n=1;
while(cin>>p>>e>>i>>d){
if(p!=-1&&e!=-1&&i!=-1&&d!=-1){
for(int k =21252;k>0;k--){
;
if((23-p+k)%23==0&&(28-e+k)%28==0&&(33-i+k)%33==0)
cout<<"Case "<<n<<": the next triple peak occurs in "<<k-d<<" days."<<endl;
}
n++;
}
else break;
}
}
改正后:
#include <iostream>
using namespace std;
int main()
{ int p,e,i,d,n=1;
while(cin>>p>>e>>i>>d){
if(p==-1&&e==-1&&i==-1&&d==-1)
break;
for(int k =1;;k++) //不能从21252找,因为题目是给定天数的下一次同一天,虽然倒着找出来的不用break还恰巧限制了范围,其实题目给出的如果找到第一次是不会超的
if((k-p)%23==0&&(k-e)%28==0&&(k-i)%33==0&&k>d){
cout<<"Case "<<n++<<": the next triple peak occurs in "<<k-d<<" days."<<endl;
break;
}
}
return 0;
}
准哥代码:
#include<iostream>
using namespace std;
int main()
{
int i,d,e,p,a,n=0;
while(cin>>d>>e>>p>>a)
{
++n;
if(d==-1&&e==-1&&p==-1&&a==-1)
break;
for(i=1;;i++)
if((i-d)%23==0&&(i-e)%28==0&&(i-p)%33==0&&i>a)
break;
cout<<"Case "<<n<<": "<<"the next triple peak occurs in "<<i-a<<" days."<<endl;
}
return 0;
}
感觉准哥的爽快清凉些!