POJ_1006_Biorhythms

/*
利用“中国剩余定理”求解,推导如下:
1.定理条件:23、28、33两两互质;
2.由(28*33)%23=4,找出(28*33*6)%23=5544%23=1,
  即对整数(5544*p),可被28与33整除,除以23余p;
3.类似类似求出:
  28对应整数(14421*e),可被23与33整除,除以28余e,
  33对应整数(1288*i),可被23与28整除,除以33余i;
4.则对整数(5544*p+14421*e+1288*i),除以23余p,除以28余e,除以33余i,
  注:上式为(28*33*6*p + 23*33*19*e + 23*28*2*i);
5.将题目中的输入分别对应于该整数的余数p,e,i,
  再做按输出要求做相应处理即得解。
*/

#include<iostream>  
using namespace std;

int main(){
	int p, e, i, d, time = 1, n;
	while (cin >> p >> e >> i >> d, p != -1){
		n = (5544 * p + 14421 * e + 1288 * i) % 21252;
		if (n <= d) n += 21252;//21252为23、28、33的最小公倍数
		cout << "Case " << time++ << ": the next triple peak occurs in " << n - d << " days." << endl;
	}
	return 0;
}
//暴搜
#include<cstdio>
using namespace std;

int main(){
	int p, e, i, d, r, c = 1;
	while (scanf("%d%d%d%d", &p, &e, &i, &d), p != -1){
		p %= 23; e %= 28; i %= 33;
		for (r = d + 1; !((r % 23 == p) && (r % 28 == e) && (r % 33 == i)); r++);
		printf("Case %d: the next triple peak occurs in %d days.\n", c++, r - d);
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值