Biorhythms

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
 
#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;
}

你可能感兴趣的:(Biorhythms)