swust oj 509

发布于:2022-11-06 ⋅ 阅读:(395) ⋅ 点赞:(0)

#include <stdio.h>
int main()
{
    //先用一维数组来代表每一个月的天数(注意此时2月只有28天,若是碰到闰年则需要加1天)
    int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    //正常定义变量,初始化最好写上
    int sum=0,year,month,day;
    //需要多组输入,所以用这个
    while(~scanf("%d %d %d",&year,&month,&day))
    {
        //其实这里可以直接写i=9,然后下面不减243,但是oj过不了很奇怪,无所谓,写成i=0下面减去243就行了
        for(int i=0;i<month-1;i++)
        {
            day+=a[i];//遍历每个月的天数加起来
        }
        计算总天数(这是没分闰年与非闰年),因为year从2007年算起,所以要减去2007
        day=day+(year-2007)*365-243;
      //上面所提到的,此时碰到了闰年,如果超过了二月则需要加1,或者已经到了2009年,2010年,此时也需要加一
        if(year==2008&&month>2||year>2008)
        {
            day++;
        }
        //注意是从9月1日星期六开始计算,所以当余数是3的时候,就是星期一了,就输出all
        if(day%7==3)
        {
            printf("ALL\n");
            continue;//加continue意思是跳过这个if循环了,然后执行循环外面的语句
        }
        sum=day-day/7;

        //此时便在判断是否进入了下一周,若到了下一周,则需要再减去一个星期一
        if(day%7>=3) sum--;
        sum=sum%4;
        switch(sum){
            case 1:printf("B\n");break;
            case 2:printf("X\n");break;
            case 3:printf("H\n");break;
            case 0:printf("P\n");break;
        }    
    }
            return 0;    
}