#include<bits/stdc++.h>
using namespace std;
/*
终止的方式:
设置了一个三层循环,对于每一天进行判断,等于2024年4月13日就要输出结果并且结束程序。
*/
/*
计算年份对应的数字不能直接进行操作,需要复制年份的值
*/
/*
每次进入循环的时候都要进行初始化。
总的笔画是年+月+日
确定顺序是从前往后进行计算,即每次计算月的和的时候要在年的基础上。
如不进行局部变量的初始化会将所有天数对应的笔画进行累加计算。
*/
int day[14]={0,31,31,31,30,31,30,31,31,30,31,30,31,0};//每一个月对应的天数
int b[10]={13,1,2,3,5,4,4,2,2,2};
int cnt=0;
int main()
{
for(int i=2000;i<=2024;i++)
{
if(i%4==0&&i%100!=0||i%400==0) day[2]=29;//判断是否为闰年
else day[2]=28;
int sum=0;
int year=i;
//复制年份的值,不能直接用i,否则会对i进行修改。
while(year) //计算年份需要的笔画
{
sum+=b[year%10]; //不能直接改变i的值否则会卡死
year/=10;
}
for(int j=1;j<=12;j++)
{
int sum2=sum;//局部变量
sum2+=b[j/10]+b[j%10];//计算月份的笔划
for(int k=1;k<=day[j];k++)
{
int sum3=sum2;//局部变量的初始化
sum3+=b[k/10]+b[k%10];
if(sum3>50) cnt++;
if(i==2024&&j==4&&k==13)
{
cout<<cnt;
return 0;
}
}
}
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int main()
{
//将下标对应月份,将值对应天数。只需要开一个数组
int month[14] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 0};//月份天数对应数组下标
int bihua[10] = {13, 1, 2, 3, 5, 4, 4, 2, 2, 2};//笔画对应数组下标
int sum = 0;
for (int year = 2000; year <= 2024; year++) {//对所有的年进行遍历
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) month[2] = 29;//判断闰年
else month[2] = 28;
int Year = year;
int number = 0;
while (Year) {
number += bihua[Year % 10];//计算年的笔画
Year /= 10;
}
for (int M = 1; M <= 12; M++) {
int number2 = number;
number2 += bihua[M % 10]+bihua[M / 10];//计算月的笔画
//月只有两位
for (int day = 1; day <= month[M]; day++) {
int number3 = number2;
number3 += bihua[day % 10];
number3 += bihua[day / 10];//计算天笔画
if (number3 > 50)//判断是否大于50,去练篮球
sum++;//进行练篮球的次数的累加
//number1 2 3 是在循环中不断传递的
//这样的三层循环也就是表示一天一天的加,判断每一天是否合法并且判断是否到达指定日期。
if (year == 2024 && M == 4 && day == 13){//判断是否到达指定日期
cout<<sum;
return 0;
}
}
}
}
return 0;
}