星期几
给定一个1900~2100范围内日期,输出这个日期是星期几。数据有多组。如使用简化公式需证明其正确性(注解形式)。
输入格式:
输入数据的数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。
输出格式:
对于每组输入数据,输出一行,表示该日期是星期几英文单词。
输入样例:
2011/11/17
输出样例:
thursday
具体的定位某年的一月一号是星期几的话有专门的科学家做过研究并总结出了很多推算方法的,这个是比较简单的算法给你:
result=(year-1+(year-1)/4-(year-1)/100+(year-1)/400+days)%7;
(其中的“/”是将除得的结果取整数部分,“%”是求余)
其中year是年份,days是某一年的天数,result得出的结果0,1,2,…,6分别对应的星期天,星期一,星期二,…,星期六;
同样,如果你想定位某年的任一天是星期几,这个公式同样适用的,不过此时的days则是这一天在这一年中的累积天数.
#include "stdio.h"
char ew[7][20]={
"sunday","monday","tuesday","wednesday","thursday","friday","saturday"};
int a[15]={
0,31,28,31,30,31,30,31,31,30,31,30,31};
int main(){
int y,m,d;
scanf("%d/%d/%d",&y,&m,&d);
if(y%4==0&&y%100!=0||y%400==0)
a[2]=29;
int ans=d,i;
for(i=1;i<=m-1;i++){
ans+=a[i];
}
int s,r;
s=y-1+(y-1)/4-(y-1)/100+(y-1)/400+ans;
r=s%7;
for(i=0;i<=6;i++){
if(r==i){
printf("%s\n",ew[i]);
break;
}
}
return 0;
}