原題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#include 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; }