每一年都会有很多特殊的日子,而有一种特殊的方式叫做“吻合日”。“吻合日”的定义为:如果某日的日期对10取模后的值等于该日的星期值(周日视为7),则称该日为“吻合日”。如2021年3月3日为周三,是“吻合日”。Jaanai想要你帮她求出在一段时间范围内的“吻合日”的数量及每个星期值下“吻合日”的具体数量。 输入格式: 包含m组数据(m不给出),每组数据有两行: 第一行三个数,代表起始年月日;(含) 第二行三个数,代表终止年月日。(不含) 输出格式: 共m行,每行八个整数,第一个整数代表给出的时间范围内“吻合日”的总数,第2-8个整数代表周一至周日分别的“吻合日”数量,整数之间由一个空格分隔。 行末没有多余空格,但是有换行符。,用c语言
时间: 2023-11-22 07:53:33 浏览: 121
```c
#include <stdio.h>
// 判断是否为闰年
int isLeap(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
// 计算某年某月的天数
int getDays(int year, int month) {
if (month == 2) {
return isLeap(year) ? 29 : 28;
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
return 30;
} else {
return 31;
}
}
// 计算某一天是星期几
int getWeekday(int year, int month, int day) {
int c = year / 100; // 世纪
year %= 100; // 年
if (month == 1 || month == 2) {
month += 12;
year--;
}
int w = year + year / 4 + c / 4 - 2 * c + 13 * (month + 1) / 5 + day - 1;
w = (w % 7 + 7) % 7;
return w == 0 ? 7 : w;
}
int main() {
int y1, m1, d1, y2, m2, d2;
while (scanf("%d%d%d%d%d%d", &y1, &m1, &d1, &y2, &m2, &d2) == 6) {
int total = 0, cnt[7] = {0};
for (int y = y1; y < y2; y++) {
for (int m = 1; m <= 12; m++) {
int days = getDays(y, m);
for (int d = 1; d <= days; d++) {
if (d % 10 == getWeekday(y, m, d)) {
total++;
cnt[getWeekday(y, m, d) - 1]++;
}
}
}
}
for (int m = 1; m < m2; m++) {
int days = getDays(y2 - 1, m);
for (int d = 1; d <= days; d++) {
if (d % 10 == getWeekday(y2 - 1, m, d)) {
total++;
cnt[getWeekday(y2 - 1, m, d) - 1]++;
}
}
}
for (int d = 1; d < d2; d++) {
if (d % 10 == getWeekday(y2 - 1, m2, d)) {
total++;
cnt[getWeekday(y2 - 1, m2, d) - 1]++;
}
}
printf("%d", total);
for (int i = 0; i < 7; i++) {
printf(" %d", cnt[i]);
}
printf("\n");
}
return 0;
}
```
阅读全文