问题描述:
解答:
采用暴力枚举
#include <stdio.h>
int main()
{
int arry[100] = {
5,6,8,6,9,1,6,1,2,4,9,1,9,8,2,3,6,4,7,7,5,9,5,0,3,8,7,5,8,1,5,
8,6,1,8,3,0,3,7,9,2,7,0,5,8,8,5,7,0,9,9,1,9,4,4,6,8,6,3,3,8,5,
1,6,3,4,6,7,0,7,8,2,7,6,8,9,5,6,5,6,1,4,0,1,0,0,9,4,8,0,9,1,2,
8,5,0,2,5,3,3
};
int daysInMonth[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
int ans = 0;
for (int mouth = 1;mouth <= 12;++mouth)
{
for (int day = 1;day <= daysInMonth[mouth];++day)
{
int dataSeq[8] = { 2,0,2,3,mouth / 10,mouth % 10,day / 10,day % 10 };
int k = 0;
for (int i = 0;i < 100;++i)
{
if (arry[i] == dataSeq[k])
{
++k;
if (k == 8)
{
ans++;
break;
}
}
}
}
}
printf("%d\n", ans);
return 0;
};
运行结果:

要点解析:
1. 大批量数值增添英文逗号“,”分割创建数组
int arry[100] = { 5,6,8,6,9,1,6,1,2,4,9,1,9,8,2,3,6,4,7,7,5,9,5,0,3,8,7,5,8,1,5, 8,6,1,8,3,0,3,7,9,2,7,0,5,8,8,5,7,0,9,9,1,9,4,4,6,8,6,3,3,8,5, 1,6,3,4,6,7,0,7,8,2,7,6,8,9,5,6,5,6,1,4,0,1,0,0,9,4,8,0,9,1,2, 8,5,0,2,5,3,3 };
新建excel表格 —— copy全部数字到任意单元格 —— “数据”-“分列”-“分隔符号”-“空格”
插入函数“TEXTJION” —— 选中已完成分列的数字行 —— 分隔符号“,”即可
2. 由题数据为2023年,创建该年每月最大日期数为数组,注意为方便解答,数组1~12为月份最大日期数,0随即设为‘0’
int daysInMonth[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
3. 依次进行8个数字的比对,得出的月份、日期有大于等于10的情况,统一进行取整、求余得到8个符合题意的8个数字,注意“break”必须要加,否则无法正确退出循环
int ans = 0; for (int mouth = 1;mouth <= 12;++mouth) { for (int day = 1;day <= daysInMonth[mouth];++day) { int dataSeq[8] = { 2,0,2,3,mouth / 10,mouth % 10,day / 10,day % 10 }; int k = 0; for (int i = 0;i < 100;++i) { if (arry[i] == dataSeq[k]) { ++k; if (k == 8) { ans++; break; } } } } }
* 欢迎留言讨论~