http://poj.org/problem?id=1006
例如:給定時間為10,下次出現(xiàn)三個高峰同天的時間是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;
}