poj1006

题目大意:生物节律
一些人相信有三种循环在一个人生命中从他或者她出生的那天起,这个三个周期是,身体,情绪,智力, 并且他们有23,28,和33天的时间,在每一个周期里面都有一个周期,在一个周期的高峰期,一个人可以在这个领域做的最好,例如,如果这是一条曲线,思维过程讲更容易清晰和集中,来自这三个不同的周期,这三个峰值在不同的时期,我们想确定每个人三个峰值同时发生的时间,对于每个周期,你要给出这年中的一个峰值(没有必要是第一个)的时间,你也需要给出一个天数这年是从那天开始的,你的任务就是在当前确定的日期找到下一个三重峰值日期,给定的日期不算,例如给定的日期是10,并且下一个三重峰值日期是2,不是3,如果三重峰值发生在给定的日期,你应该计算下一个三重峰值日期出现的时间
比较简单的模拟题,数值也不大,直接使用下标法模拟
///////////需要注意有可能开始日期在峰值前面

 

#include<iostream>
#include<string.h>
using namespace std;

#define maxn 31253

int day[maxn];

void MakeOne(int Start, int Tmp)
{
    for(int i=Start; i<maxn; i+=Tmp)
        day[i]++;
    for(int i=Start-Tmp; i>=0; i-=Tmp)
        day[i]++;
}
int  Find(int Start, int End)
{
    for(int i=Start+1; i<End; i++)
        if(day[i] == 3)return i;
    return End;
}

int  main()
{
    int x, y, z, start, k=1;

    while(cin>>x>>y>>z>>start, x!=-1)
    {
        memset(day, 0sizeof(day));

        MakeOne(x, 23);
        MakeOne(y, 28);
        MakeOne(z, 33);

        int ans = Find(start, start+21252);

        cout<<"Case "<< k <<": the next triple peak occurs in "<< ans-start <<" days."<<endl;
        k++;
    }

    return 0;

} 

posted @ 2015-04-01 15:11  无忧望月  阅读(171)  评论(0编辑  收藏  举报
levels of contents