枚举和模拟 下 习题
05 日期
描述
今天是 20122012 年 44 月 1212 日星期四,编写程序,输入今天开始到 1212 月 3131 日之间的任意日期,输出那一天是星期几。
输入格式
共两行,第一行包含一个整数 m,表示询问日期的月份。
第二行包含一个整数 d,表示询问日期的为该月的第几天。
输出格式
输出询问日期是星期几。
注意,要用英文表示。
周一到周日的英文表示如下:
"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"
数据范围
4≤m≤12
1≤d≤3
保证日期合法。
输入样例
5
20
输出样例
Sunday
解答
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
using namespace std;
//求当前天数的下一天的年月日
void NextDay(int& year, int& month, int& day) {
int dayOfMonth[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
//给一个年份 判断是不是闰年
//1 可以被100整除 也可以被400整除 是闰年
//2 不能被100整除 但是可以被4整除 是闰年
//判断是不是闰年
if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0) {
//此处 逻辑&&的优先级高于逻辑||
dayOfMonth[2] = 29;
}
else {
dayOfMonth[2] = 28;
}
day++;//下一天
//看加完以后的天数 有没有超过这个月的上限值
if (day > dayOfMonth[month]) {
day = 1;//日回归到1
month++;//月份往后走了一个月
}
//看加完以后的月数 有没有超过月份的上限值
if (month > 12) {
month = 1;
year++;
}
}
int main() {
//今天是 2012 年 4 月 12 日星期四
int year1 = 2012;
int month1 = 4;
int day1 = 12;
//先计算出到达目标日期要多少天
//再使用取余的方式 算出这一天是星期几
//年份不变
int year2 = 2012;
int month2;
int day2;
scanf("%d", &month2);
scanf("%d", &day2);
int count = 0;//过了多少天
while (1) {
if (month1 == month2 && day1 == day2) {
break;
}
NextDay(year1, month1, day1);
count++;
}
int yushu = (count+4) % 7;
if (yushu == 4) {
printf("Thursday");
}
else if (yushu == 5) {
printf("Friday");
}
else if (yushu == 6) {
printf("Saturday");
}
else if (yushu == 0) {
printf("Sunday");
}
else if (yushu == 1) {
printf("Monday");
}
else if (yushu == 2) {
printf("Tuesday");
}
else if (yushu == 3) {
printf("Wednesday");
}
return 0;
}