編程練習(一)

生理週期

題目來源: OpenJudge
總時間限制:1000ms 內存限制: 65536kB

描述

人生來就有三個生理週期,分別爲體力週期、感情週期和智力週期,它們的週期長度分別爲23天、28天和33天。每一個週期中有一天是高峯。在高峯這天,人會在相應的方面表現出色。例如,在智力週期的高峯,人會思維敏捷,注意力容易高度集中。因爲三個週期的長度不同,所以通常三個週期的高峯不會落在同一天。對於每個人,想知道何時三個高峯落在同一天。對於每個週期,會給出從當前年份的第一天開始,到出現高峯的天數(不一定是第一次高峯出現的時間)。給定一個從當年第一天開始的天數,你的任務是輸出從給定時間開始(不包括給定時間),下一次三個高峯落在同一天的時間(距給定時間的天數)。例如:給定時間爲10,下次出現三個高峯同一天的時間是12,則輸出2(注意這裏不是3)。

輸入

輸入包含多組數據,每一組數據由四個整數組成,數據以-1 -1 -1 -1 結束。
對於四個整數p, e, i和d,p, e, i分別表示體力、情感和智力高峯出現的時間(時間從當年的第一天開始計算)。d是給定的時間,可能小於p, e或i。所有給定時間是非負的並且小於或等於365,所求的時間小於或等於21252。

輸出

從給定時間起,下一次三個高峯同一天的時間(距離給定時間的天數)。

樣例輸入

0 0 0 0
0 0 0 100
5 20 34 325
4 5 6 7
283 102 23 320
203 301 203 40
-1 -1 -1 -1

樣例輸出

Case 1: the next triple peak occurs in 21252 days.
Case 2: the next triple peak occurs in 21152 days.
Case 3: the next triple peak occurs in 19575 days.
Case 4: the next triple peak occurs in 16994 days.
Case 5: the next triple peak occurs in 8910 days.
Case 6: the next triple peak occurs in 10789 days.

解題:C++

#include<iostream>;
#include<vector>
using namespace std;
int main()
{
    int a, b, c, n;
    vector<int> v;
    while(1){
        bool f = true;
        cin >> a >> b >> c >> n;
        if (a == -1)break;
        if (a >= 23)
            a = a % 23;
        if (b >= 28)
            b = b % 28;
        if (a >= 33)
            c = c % 33;
        for (int i = n + 1; f && i <= 21252 + n; i++)
        {
            if ((i - a) % 23 == 0 && (i - b) % 28 == 0 && (i - c) % 33 == 0)
            {
                f = false;
                n = i - n;
            }
        }
        v.push_back(n);
    }
    for (int i = 0;i < v.size();i++) {
        cout << "Case " << i + 1 << ": the next triple peak occurs in " << v[i] << " days." << endl;

    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章