2977 生理周期(简单的枚举例子)

摘要:
描述人类生命中有三个生理周期,即生理、情感和智力周期。它们的周期长度分别为23天、28天和33天。每个周期中的一天是高峰。因为三个周期的周长不同,所以三个周期中的峰值通常不会在同一天出现。29需要注意的事项30建立一个简洁的数学模型31尽可能减少搜索空间32采用适当的搜索顺序33在这个问题中,必须满足(j-p)%23==0&&(j-e)%28==0&&&(j-i)%33==034降低搜索成本的方法是当结果需要满足多个条件时,首先满足一个条件,然后条件3的搜索空间也减少了*/3536#include 37intmain()38{39intp,e,i,d;40intj;41while(scanf(“%d%d”,&p,&e,&i,-d)!
描述

人生来就有三个生理周期,分别为体力、感情和智力周期,它们的周期长度为23天、28天和33天。每一个周期中有一天是高峰。在高峰这天,人会在相应的方面表现出色。例如,智力周期的高峰,人会思维敏捷,精力容易高度集中。因为三个周期的周长不同,所以通常三个周期的高峰不会落在同一天。对于每个人,我们想知道何时三个高峰落在同一天。对于每个周期,我们会给出从当前年份的第一天开始,到出现高峰的天数(不一定是第一次高峰出现的时间)。你的任务是给定一个从当年第一天开始数的天数,输出从给定时间开始(不包括给定时间)下一次三个高峰落在同一天的时间(距给定时间的天数)。例如:给定时间为10,下次出现三个高峰同天的时间是12,则输出2(注意这里不是3)。

输入
一行,包含四个整数:p, e, i和d,相邻两个整数之间用单个空格隔开。 p, e, i分别表示体力、情感和智力高峰出现的时间(时间从当年的第一天开始计算)。d 是给定的时间,可能小于p, e, 或 i。 所有给定时间是非负的并且小于等于365, 所求的时间小于等于21252。
输出
一个整数,即从给定时间起,下一次三个高峰同天的时间(距离给定时间的天数)。
样例输入
4 5 6 7
样例输出
16994
1 /*
2 简单枚举的例子
3 题意描述:输入三个周期的新一轮开始时间,和当前的时间,计算并输出从当前时间到满足三个周期的时间的最少天数*/
4 /*解题思路:刚开始以为求三个数的最小公倍数,其实仔细一想,三个周期的开始时间不同,采用枚举思想,找出满足三个条件
5 的那一天,再减去初始天数即可。*/ 
6 /*
7 方法一(超时) 
8 #include<stdio.h>
9 int main()
10 {
11 int p,e,i,d;
12 int j,t=1;
13 while(scanf("%d%d%d%d",&p,&e,&i,&d),p + e + i + d != -4)
14 {
15 for(j=d+1;j<=21252;j++)
16 {
17 if((j-p)%23==0 && (j-e)%28==0 && (j-i)%33==0)
18 break;
19 }
20 printf("%d
",j-d);
21 //printf("Case %d: the next triple peak occurs in %d days.
",t++,j-d);
22 }
23 return 0;
24 }
25 */
26 /*
27 方法二 
28 枚举是一种基于已有的知识进行答案猜测的一种问题求解策略。
29 需要注意的问题
30 建立简洁的数学模型
31 尽可能的减少搜索空间
32 采用合适的搜索顺序
33 此题中需要满足(j-p)%23==0 && (j-e)%28==0 && (j-i)%33==0
34 减少搜索开销的办法是当结果需要满足多个条件是,先满足一个,将条件二的搜索空间减少,进而将条件三的搜索空间也减小*/
35  
36 #include<stdio.h>
37 intmain()
38 {
39     intp,e,i,d;
40     intj;
41     while(scanf("%d%d%d%d",&p,&e,&i,&d) !=EOF)
42 {
43         for(j=d+1;j<=21252;j++)
44 {
45             if((j-p)%23==0)
46                 break;
47 }
48         for(;j<=21252;j+=23)
49 {
50             if((j-e)%28==0)
51                 break;
52 }
53         for(;j<=21252;j+=23*28)//分步乘法 
54 {
55             if((j-i)%33==0)
56                 break;
57 }
58         printf("%d
",j-d);
59 }
60     return 0;
61 }
62 
63 
64 /*另外补充一下求n个数的最小公倍数和求n个数的最大公约数(暂无)*/
65 /*总结一句话就是两两求lcm,最后结果就是n个数的最小公倍数 
66 #include <iostream>
67 using namespace std;
68 int gcd(int a,int b)
69 {    
70 if (b==0)
71 return a;
72 return gcd(b, a%b);
73 }
74 int main()
75 {   
76 int t;    
77 cin >> t;    
78 while (t--) 
79 {        
80 int i,n,m,temp=0,ans=1;        
81 cin >> n;        
82 for (i=0; i<n; i++) 
83 {            
84 cin >> m;            
85 temp=gcd(ans,m);            
86 ans=ans/temp*m;        
87 }        
88 cout << ans << '
';    
89 }    
90 return 0;
91 }
92 */ 

免责声明:文章转载自《2977 生理周期(简单的枚举例子)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇详解C/C++预处理器 .图像傅里叶变换下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章