題目描述。
如果一個日期中年月日的各位數字之和是完全平方數,則稱為一個完全日期。
例如:2021 年?6?月?5?日的各位數字之和為?2+0+2+1+6+5=16,而?16?是一個完全平方數,它是?4?的平方。所以?2021 年?6?月?5?日是一個完全日期。
例如:2021?年?6?月?23 日的各位數字之和為?2+0+2+1+6+2+3=16,是一個完全平方數。所以?2021 年?6?月?23?日也是一個完全日期。
請問,從?2001 年?1?月?1?日到?2021 年?12?月?31?日中,一共有多少個完全日期?
#include<iostream>
using namespace std;int day[13]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};int ans;int check(int a, int b, int c)
{int temp = a%10 + a/10%10 + a/100%10 + a/1000 + b%10 + b/10 + c%10 + c/10;//日期2001.1.1數字和最小是5,最大日期2019.9.29數字和是32 if(temp==9 || temp==16 || temp==25){return 1;}return 0;
}int main()
{for(int i=2001; i<=2021; ++i){day[2]=28; //重置2月天數for(int j=1; j<=12; ++j){if(i%4==0&&i%100!=0 || i%400==0) day[2]=29;for(int k=1; k<=day[j]; ++k){if(check(i, j, k)) ans++;if(i==2021 && j==12 && k==31){cout<<ans;return 0;}}}}return 0;
}