hdu1370 Biorhythms

原题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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值