Biorhythms

http://poj.org/problem?id=1006

例如:给定时间为10,下次出现三个高峰同天的时间是12,则输出2(注意这里不是3)。
所以num-d是所求的值
num满足以下条件,其实就是中国剩余定理。
num % 23 == p; num % 28 == e; num % 33 == i

1
2
3
4
5
因为有范围限制
num - d > 21252
result = (num - d) %= 21252
如果此时result<=0
那么(num-d) += 21252

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#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;
}
坚持技术分享,如果帮助到了您,您的支持将鼓励我继续创作!