3779 - 【START】2015暑期训练——今儿,周几?
时间限制 : 1 秒
内存限制 : 128 MB
求一个日期是周几?注,已知1979年12月31日为星期一。
题目输入
第一行为数组组数M(0 < M < 100)
接下来M行每行三个数,分别表示年、月、日,三个数字用空格分隔。
题目输出
对应每个输入,输出为一行,以换行符结束。
输入/输出样例
输入格式
1 1980 1 1
输出格式
1980年1月1日是星期二
C语言解答
#include<stdio.h> int fun(int y,int m,int d); int isrunnian(int n) { if(n%4 == 0&&n%100 != 0 || n%400 == 0) return 1; else return 0; } int main() { int t,y,m,d; int allday; scanf("%d",&t); while(t--) { scanf("%d%d%d",&y,&m,&d); allday = fun(y,m,d); printf("%d年%d月%d日是星期",y,m,d); if(y > 1979) switch(allday%7) { case 0:printf("一");break; case 1:printf("二");break; case 2:printf("三");break; case 3:printf("四");break; case 4:printf("五");break; case 5:printf("六");break; case 6:printf("日");break; } else switch(allday%7) { case 0:printf("一");break; case 1:printf("日");break; case 2:printf("六");break; case 3:printf("五");break; case 4:printf("四");break; case 5:printf("三");break; case 6:printf("二");break; } printf("\n"); } return 0; } int fun(int y,int m,int d) { int i,dy,allday = 0; int a[12]={31,29,31,30,31,30,31,31,30,31,30,31}; int b[12]={31,28,31,30,31,30,31,31,30,31,30,31}; if(y > 1979) { dy = 1980; while(dy < y) { if(isrunnian(dy)) allday += 366; else allday += 365; dy++; } if(isrunnian(y)) for(i = 0;i < m - 1;i++) allday += a[i]; else for(i = 0;i < m - 1;i++) allday += b[i]; allday += d; } else { dy = 1979; while(dy > y) { if(isrunnian(dy)) allday += 366; else allday += 365; dy--; } if(isrunnian(y)) for(i = 11;i >= m;i--) allday += a[i]; else for(i = 11;i >= m;i--) allday += b[i]; allday += (a[m-1]-d); if(isrunnian(y)&&m == 2) allday--; } return allday; }
C++解答
#include<iostream> #include<cstdio> using namespace std; int main() { //freopen("1.txt","r",stdin); //freopen("2.txt","w",stdout); int year,month,day; int M; cin >> M; while(M--) { cin >> year >> month >> day; // 输入年月日 bool leap = year%400 == 0 || year%100 != 0 && year%4 == 0; // 判断闰年 int total = year-1980+(year-1980+3)/4; // 求平(闰)年累计的总天数 for(int i = month-1; i > 0; i--) { switch(i) { case 1:case 3:case 5:case 7:case 8:case 10:total += 31; break; case 4:case 6:case 9:case 11:total += 30; break; case 2:total += leap ? 29 : 28; } } total += day; // 当个月的天数 int week = 1; // 起始日是1979-12-31是星期一 week = (week+total)%7; // 求得星期几 cout << year << "年" << month << "月" << day << "日" << "是星期"; switch(week) { case 0:cout << "日" << endl; break; case 1:cout << "一" << endl; break; case 2:cout << "二" << endl; break; case 3:cout << "三" << endl; break; case 4:cout << "四" << endl; break; case 5:cout << "五" << endl; break; case 6:cout << "六" << endl; break; } } return 0; }