Bovine Birthday(牛的生日)
贝茜问她的朋友生日是星期几,她只知道生日是2003年5月25日不知道是星期几。请你写一个程序。注意没有哪只牛的生日早于1800年。 1900年1月1日是星期一。 每月的天数:
每4年有一个闰年(1992 = 4*498所以1992是闰年但1990年就不是闰年)。
上面的规则不适合百年。世纪年要能被400整除才是闰年,不能被整除的就不是。因而1700、1800、1900和2100就不是闰年,但2000年是闰年。
输入 一行:三个空格隔开的整数表示一个日期为年 月 日。
输出 一行:一个单词,表示这一天是星期几monday, tuesday, wednesday, thursday, friday, saturday, sunday。
#include <bits/stdc++.h>
using namespace std;
int y,m,d,sum0,sum,_;
int main()
{
cin>>y>>m>>d;
sum0=365*(1900-1)+(1900-1)/4-1899/100+1899/400+1;
sum=365*(y-1)+(y-1)/4-(y-1)/100+(y-1)/400;
if(y%400==0 ||y%4==0 && y%100!=0)_=1;
else _=0;
switch(m){
case 1:sum=sum+d;break;
case 2:sum=sum+31+d;break;
case 3:sum=sum+31+28+d+_;break;
case 4:sum=sum+31+28+31+d+_; break;
case 5:sum=sum+31+28+31+30+d+_;break;
case 6:sum=sum+31+28+31+30+31+d+_;break;
case 7:sum=sum+31+28+31+30+31+30+d+_;break;
case 8:sum=sum+31+28+31+30+31+30+31+d+_;break;
case 9:sum=sum+31+28+31+30+31+30+31+31+d+_;break;
case 10:sum=sum+31+28+31+30+31+30+31+31+30+d+_;break;
case 11:sum=sum+31+28+31+30+31+30+31+31+30+31+d+_;break;
case 12:sum=sum+31+28+31+30+31+30+31+31+30+31+30+d+_;break;
}
sum=sum-sum0;
sum=sum%7;
switch(sum){
case 0:cout<<"monday";break;
case 1:cout<<"tuesday";break;
case 2:cout<<"wednesday";break;
case 3:cout<<"thursday";break;
case 4:cout<<"friday";break;
case 5:cout<<"saturday";break;
case 6:cout<<"sunday";
}
return 0;
}
1900年以前(sum-sum0)是负的,直接取模有问题,sum=(sum+700000)%7
【以下回答由 GPT 生成】
问题的代码已经基本上是正确的,只需进行一些小的修改即可得到正确的结果。以下是对代码的修改建议:
#include <bits/stdc++.h>
using namespace std;
int y, m, d, sum;
int main()
{
cin >> y >> m >> d;
sum = 365 * (y - 1) + (y - 1) / 4 - (y - 1) / 100 + (y - 1) / 400;
switch (m) {
case 1: sum = sum + d; break;
case 2: sum = sum + 31 + d; break;
case 3: sum = sum + 31 + 28 + d; break;
case 4: sum = sum + 31 + 28 + 31 + d; break;
case 5: sum = sum + 31 + 28 + 31 + 30 + d; break;
case 6: sum = sum + 31 + 28 + 31 + 30 + 31 + d; break;
case 7: sum = sum + 31 + 28 + 31 + 30 + 31 + 30 + d; break;
case 8: sum = sum + 31 + 28 + 31 + 30 + 31 + 30 + 31 + d; break;
case 9: sum = sum + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + d; break;
case 10: sum = sum + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + d; break;
case 11: sum = sum + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + d; break;
case 12: sum = sum + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + d; break;
}
sum %= 7;
switch (sum) {
case 0: cout << "sunday"; break;
case 1: cout << "monday"; break;
case 2: cout << "tuesday"; break;
case 3: cout << "wednesday"; break;
case 4: cout << "thursday"; break;
case 5: cout << "friday"; break;
case 6: cout << "saturday"; break;
}
return 0;
}
这里做出的更改是: 1. 将计算sum0的部分删除,因为在问题中并没有提到需要使用到sum0。 2. 修改sum的计算方式,去掉多余的计算和加1操作。 3. 修改星期几的输出顺序,使得0表示星期天。