2964:日历问题

解题思路

1.用数组模拟 星期几,各个月份的天数
2.星期几 就是 天数 % 7
3.年份 减去该年有多少天(判断闰年),减一次+1年,直到 所给天数小于该年的天数
4.月份 减去该月有多少天,减一次+1月,直到所给天数小于该月的天数
5.剩余的日子 +1 就是 所求的日子

AC代码

#include<stdio.h>
//星期几 ,dow[days % 7]
// year = 2000  if days - dofyear[jundge[year]]>0 year ++ 
// month=1   runnian = judge[year]   if days - domonth[run][month]>0 month++ 
//day

int judge(int year){
	if((year%4==0 && year %100!=0) || year%400==0)
		return 1;
	else 
		return 0;
} 
int main(){
	int days; 
	//模拟数组
	char doweek[7][10] = {"Saturday","Sunday", "Monday", "Tuesday",
							 "Wednesday", "Thursday", "Friday"};
	int doyear[2]={365,366};
	int domonth[2][12] = {31,28,31,30,31,30,31,31,30,31,30,31
						,31,29,31,30,31,30,31,31,30,31,30,31};
	//输入
	while(1){
		scanf("%d",&days);
		if(days==-1)
			break;
	//计算星期几
		int week = days % 7;
	//计算年
		int year = 2000;
		int leap = 1;//1是闰年 
		days -= doyear[leap];
		while(days>=0){
			year++;
			leap = judge(year);
			days -= doyear[leap];
		}
		days += doyear[leap];
	//计算月
		int month = 0;
		days -= domonth[leap][month];
		while(days>=0){
			month++;
			days -= domonth[leap][month];
		}
		days += domonth[leap][month];
	//天数 就是剩下的days+1
	//输出
		printf("%d-%02d-%02d %s\n",year,month+1,days+1,doweek[week]); 
	}
}

总结

善用数组模拟

猜你喜欢

转载自blog.csdn.net/u013129143/article/details/82996489