http://poj.org/problem?id=1006
例如:给定时间为10,下次出现三个高峰同天的时间是12,则输出2(注意这里不是3)。
所以num-d是所求的值
num满足以下条件,其实就是中国剩余定理。
num % 23 == p; num % 28 == e; num % 33 == i
因为有范围限制
当 num - d > 21252 时
result = (num - d) %= 21252;
如果此时result<=0
那么(num-d) += 21252
#include<stdio.h>
#define MAX 21252
int main()
{
int p, e, i, d, n, count = 0;
while( scanf("%d%d%d%d", &p, &e, &i, &d) != EOF )
{
count++;
if(p == -1 && e == -1 && i == -1 && d == -1)
{
break;
}
n = ( 33*28*6*p + 23*33*19*e + 23*28*2*i - d ) % MAX;
// 6 ,19 ,2 分别是 33*28 23*33 23*28的逆元
if( n <= 0 ) // 范围限制
{
n += 21252;
}
printf("Case %d: the next triple peak occurs in %d days.\n", count, n );
}
return 0;
}
网友评论