原题http://acm.hdu.edu.cn/showproblem.php?pid=1370
发现之前把所有题目都贴上给别人带来不了什么帮助。。现在写写题意。。。
题意:这个题据说是中国剩余定理- -表示什么都没看就AC了。光看的测试数据,算了算发现分别取余对应的余数就是一开始的输入数据= =了然,后来纠结了一下混乱的输入格式还有就是当天的天数如果大于或者等于到达高潮的那个天数。
写几个式子就很好懂了:
23x + p = a;
28y + e = a;
33z + i = a;
然后用x把y,z表示出来即可。。
发完文章看看人家剩余定理怎么用的。。。我这应该是最简单的算法了吧- =
小于0的情况可以是15 10 5 40
//============================================================================
// Name : Math_hdu1370.cpp
// Author : vit
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
#include <stdio.h>
using namespace std;
int main() {
int i, n, t, k1, k2;
int days;
int p, e, d;
cin >> n;
while (cin >> p >> e >> i >> d && p != -1 && i != -1 && e != -1 && d != -1) {
t = 23;
k1 = p - e;
k2 = p - i;
while (1) {
if ((t + k1) % 28 == 0 && (t + k2) % 33 == 0)
break;
t += 23;
}
days = t + p - d;
if (days <= 0) {//小于0,寻找下一个高潮点
t += 23;
while (1) {
if ((t + k1) % 28 == 0 && (t + k2) % 33 == 0)
break;
t += 23;
}
days = t + p - d;
}
cout << "Case " << n++ << ": the next triple peak occurs in " << days
<< " days." << endl;
;
}
return 0;
}