问题描述
??如果一个日期中年月日的各位数字之和是完全平方数,则称为一个完全日期。
问2001年1月1日到2021年12月31日有多少完美日期
模拟日期遍历至20211231即可
//问2001年1月1到2021年12月31有多少个完全日期
#include<bits/stdc++.h>
using namespace std;
bool check(int y,int m,int d)
{
int ans=0;
while(y)
{
ans+=y%10;
y/=10;
}
while(m)
{
ans+=m%10;
m/=10;
}
while(d)
{
ans+=d%10;
d/=10;
}
for(int i=1;i<=9;i++)
if(i*i==ans)
return 1;
return 0;
}
int a[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,28,31,30,31,30,31,31,30,31,30,31}};
int run(int y)
{
if(y%400==0)
return 1;
if(y%4==0&&y%100!=0)
return 1;
return 0;
}
int day(int y,int m)
{
return a[run(y)][m];
}
int main()
{
int y=2001,m=1,d=1;
int ans=0;
while(1)
{
for(int i=d;i<=day(y,m);i++)
{
if(check(y,m,d))
ans++;
d++;
}
if(y==2021&&m==12)
break;
d=1;
m++;
if(m==13)
{
m=1;
y++;
}
}
cout<<ans<<endl;
return 0;
}
//ans=977
|