问题描述
对于一个日期,我们可以计算出年份的各个数位上的数字之和,也可以分别计算月和日的各位数字之和。请问从 1900年 1月 1 日至 9999 年 12 月 31 日,总共有多少天,年份的数位数字之和等于月的数位数字之和加日的数位数字之和。
例如,2022 年 11 月 13 日满足要求,因为 2+0+2+2=(1+1)+(1+3) 。
请提交满足条件的日期的总数量。
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
代码(暴力)
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
// 13.45请在此输入您的代码
int a[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 非闰年
int b[13] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 闰年
int y, x, n = 0;
for (int i = 1900; i < 10000; i++) {
// 求年的各位和
y = 0;
y += i % 10;
y += i / 10 % 10;
y += i / 100 % 10;
y += i / 1000 % 10;
// 判断润年
int isLeapYear = (i % 400 == 0) || (i % 4 == 0 && i % 100 != 0);
for (int k = 1; k <= 12; k++) {
// 求月的各位和
x = 0;
x += k % 10;
x += k / 10 % 10;
int days = isLeapYear ? b[k] : a[k];
for (int z = 1; z <= days; z++) {
x += z % 10;
x += z / 10 % 10;
// 检查是否满足条件
if (x == y) n++;
x -= z % 10;
x -= z / 10 % 10;
}
}
}
printf("%d", n);
return 0;
}