43. 【日期】黑色星期五(数组)
在西方,星期五和数字13都代表着坏运气,两个不幸的个体最后结合成超级不幸的一天。所以,不管哪个月的十三日又恰逢星期五就叫"黑色星期五”。
输入:
年份
输出:
判断该年是否包含黑色星期五,如包含,给出具体日期
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
---|---|---|---|---|---|
测试用例 1 | 以文本方式显示
|
以文本方式显示
|
1秒 | 64M | 0 |
代码如下:
#include <stdio.h>
#include <ctype.h>
#include <stdbool.h>
#define DAY 13
int common_month(int month);
int leap(int i);
int date(int year, int month, int day);
int main(void)
{
/*判断每年的1月13号是不是星期五,2月13号……直到12月13号,是的话,counter++
* 引用21题的代码,“根据日期求星期”,在这个程序中,星期一返回1,星期二返回2……星期日返回0
*/
int year, month;
scanf("%d", &year);
int counter = 0;
int m[12] = { 0 };
for (month = 1; month <= 12; month++) {
if (5 == date(year, month, DAY)) {
counter++;
m[counter] = month;
}
}
printf("There are %d Black Fridays in year %d.\n", counter, year);
printf("They are:\n");
for (int i = 1; m[i] != 0; i++)
printf("%d/%d/%d\n", year, m[i], DAY);
return 0;
}
int date(int year,int month,int day)
{
//已知1900年1月1日为星期一
const int date = 1900;
/*int year, month, day;
scanf("%d %d %d", &year, &month, &day);*/
int sum = 0;
int i = year;
//累加年的天数
for (i = year; i > date; i--) {
sum += leap(i - 1);
}
//累加月的天数
if (leap(year) == 365) { //平年
for (i = 1; i < month; i++) {
sum += common_month(i);
}
}
else { //闰年
for (i = 1; i < month; i++) {
sum += common_month(i);
}
if (month > 2) {
sum += 1;
}
}
//累加日的天数
sum += day;
int weekday = sum % 7;
return weekday;
}
int leap(int i)
{
int result = 365;
if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) {
result = 366;
}
return result;
}
int common_month(int month)
{
int result = 0;
switch (month) {
case 1:
result = 31;
break;
case 2:
result = 28;
break;
case 3:
result = 31;
break;
case 4:
result = 30;
break;
case 5:
result = 31;
break;
case 6:
result = 30;
break;
case 7:
result = 31;
break;
case 8:
result = 31;
break;
case 9:
result = 30;
break;
case 10:
result = 31;
break;
case 11:
result = 30;
break;
case 12:
result = 31;
break;
}
return result;
}
标签:case,int,31,43,month,break,乐学,result,北理工 From: https://www.cnblogs.com/alien-han/p/16932585.html