poj 1006 Biorhythms

直接枚举算法解决日期问题
本文介绍了一种使用直接枚举法解决日期问题的方法,通过编写C代码实现,涉及了23、28、33等特定日期的模运算,并在给定条件下寻找满足特定条件的日期。

直接枚举(16MS,可以接受),测试数据有点纠结。

 1 # include <stdio.h>
2
3 int p, e, i, d;
4 const int add[] = {1, 23, 28, 23*28, 33, 23*33, 28*33};
5
6 int mod(int x, int m);
7
8 int main()
9 {
10 int cnt, day, sta;
11
12 cnt = 0;
13 while (1)
14 {
15 scanf("%d%d%d%d", &p, &e, &i, &d);
16 if (p==-1 && e==-1 && i==-1 && d==-1) break;
17 ++cnt;
18 for (day = d+1; day <= 21252+d; )
19 {
20 sta = mod(day-p, 23) + mod(day-e, 28)*2 + mod(day-i, 33)*4;
21 if (sta == 7) break;
22 day += add[sta];
23 }
24 day -= d;
25 printf("Case %d: the next triple peak occurs in %d days.\n", cnt, day);
26 }
27
28 return 0;
29 }
30
31 int mod(int x, int m)
32 {
33 if (x % m) return 0;
34 return 1;
35 }



转载于:https://www.cnblogs.com/JMDWQ/archive/2012/03/28/2420923.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值