题目内容:
中国有句俗语叫“三天打鱼两天晒网”,某人从1990年1月1日起开始“三天打鱼两天晒网”,即工作三天,然后再休息两天。问这个人在以后的某一天中是在工作还是在休息。从键盘任意输入一天,编程判断他是在工作还是在休息,如果是在工作,则输出:He is working,如果是在休息,则输出:He is having a rest,如果输入的年份小于1990或者输入的月份和日期不合法,则输出:Invalid input。
输入格式: "%4d-%2d-%2d"
输出格式:
"Invalid input" 或
"He is having a rest" 或
"He is working"
输入样例1:
2014-12-22
输出样例1:
He is working
输入样例2:
2014-12-24
输出样例2:
He is having a rest
输入样例3:
2014-12-32
输出样例3:
Invalid input
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
时间限制:500ms内存限制:32000kb
#include <stdio.h>
main()
{
int year,month,day,syear,countLeap=0,i,dday,loss1mday,Sumday,judge;
scanf("%4d-%2d-%2d",&year,&month,&day);
if(year<1990||month<1||month>13||day<1||day>31)
printf("Invalid input");
else
{
syear=year-1990-1;
for(i=0;i<(year-1990-1);i++)
{
if((1990+i)%4 == 0)
countLeap++;
}
dday=365*syear+countLeap;
if(year%4 == 0)
{
switch(month-1)
{
case 1: loss1mday=31; break;
case 2: loss1mday=31+29; break;
case 3: loss1mday=31+29+31;break;
case 4: loss1mday=31+29+31+30; break;
case 5: loss1mday=31+29+31+30+31; break;
case 6: loss1mday=31+29+31+30+31+30; break;
case 7: loss1mday=31+29+31+30+31+30+31; break;
case 8: loss1mday=31+29+31+30+31+30+31+31;break;
case 9: loss1mday=31+29+31+30+31+30+31+31+30;break;
case 10: loss1mday=31+29+31+30+31+30+31+31+30+31;break;
case 11: loss1mday=31+29+31+30+31+30+31+31+30+31+30;break;
}
}
else
switch(month-1)
{
case 1: loss1mday=31; break;
case 2: loss1mday=31+28; break;
case 3: loss1mday=31+29+31;break;
case 4: loss1mday=31+29+31+30; break;
case 5: loss1mday=31+29+31+30+31; break;
case 6: loss1mday=31+29+31+30+31+30; break;
case 7: loss1mday=31+29+31+30+31+30+31; break;
case 8: loss1mday=31+29+31+30+31+30+31+31;break;
case 9: loss1mday=31+29+31+30+31+30+31+31+30;break;
case 10: loss1mday=31+29+31+30+31+30+31+31+30+31;break;
case 11: loss1mday=31+29+31+30+31+30+31+31+30+31+30;break;
}
Sumday=dday+loss1mday+day;
judge=Sumday%5;
switch(judge)
{
case 1:
case 2:
case 3:printf("He is working");break;
case 4:
case 0:printf("He is having a rest");break;
}
}
}