2977 生理周期(简单的枚举例子)
生活随笔
收集整理的這篇文章主要介紹了
2977 生理周期(简单的枚举例子)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
描述 輸入一行,包含四個整數: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\n",j-d);
21 //printf("Case %d: the next triple peak occurs in %d days.\n",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 int main()
38 {
39 int p,e,i,d;
40 int j;
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\n",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 << '\n';
89 }
90 return 0;
91 }
92 */
人生來就有三個生理周期,分別為體力、感情和智力周期,它們的周期長度為23天、28天和33天。每一個周期中有一天是高峰。在高峰這天,人會在相應的方面表現出色。例如,智力周期的高峰,人會思維敏捷,精力容易高度集中。因為三個周期的周長不同,所以通常三個周期的高峰不會落在同一天。對于每個人,我們想知道何時三個高峰落在同一天。對于每個周期,我們會給出從當前年份的第一天開始,到出現高峰的天數(不一定是第一次高峰出現的時間)。你的任務是給定一個從當年第一天開始數的天數,輸出從給定時間開始(不包括給定時間)下一次三個高峰落在同一天的時間(距給定時間的天數)。例如:給定時間為10,下次出現三個高峰同天的時間是12,則輸出2(注意這里不是3)。
?
轉載于:https://www.cnblogs.com/wenzhixin/p/8428684.html
總結
以上是生活随笔為你收集整理的2977 生理周期(简单的枚举例子)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab simulink笔记06
- 下一篇: SAP Crystal Reports