| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
程序修改,请教我自己先写了一个枚举的实现,但是耗时太大了,后来看到有人留言说用中国余数法,自己也试着写了一个,用时40多MS,看到别人写的用时很少,所以把代码帖出来想让大家帮忙看看,谢谢了。
#include <stdio.h>
int main(int argc, char* argv[])
{
int p,e,i,d, index;
int day;
int x = 28*33*6;
int y = 23*33*19;
int z = 23*28*2;
index = 0;
do
{
scanf("%d %d %d %d", &p,&e, &i, &d);
if(p == -1 && e == -1 && i == -1 && d == -1)
break;
p = p%23;
e = e%28;
i = i%33;
day = (p*x + e*y + i*z) % 21252;
if(day == d)
day += 21252;
printf("Case %d: the next triple peak occurs in %d days.\n", ++index,day-d >= 0 ? day-d : day-d+21252);
}while(1);
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator