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;

} 

你可能感兴趣的:(poj)