solution1
#include<iostream>
#include<cmath>
using namespace std;
int judge(int y){
if(y % 400 == 0 || (y % 4 == 0 && y % 100 != 0)) return 1;
return 0;
}
int main(){
int h[13][2] = {{0,0}, {31, 31}, {28, 29}, {31, 31}, {30, 30}, {31, 31}, {30, 30}, {31, 31}, {31, 31}, {30, 30}, {31, 31}, {30, 30}, {31,31}};
int d[3] = {2001, 1, 1}, count = 0, t, leap, sum, date[3], sqr;
while(!(d[0] == 2021 && d[1] == 12 && d[2] == 31)){
sum = 0;
for(int i = 0; i < 3; i++) {
date[i] = d[i];
while(date[i]){
t = date[i] % 10;
date[i] /= 10;
sum += t;
}
}
sqr = sqrt(sum);
if(sqr * sqr == sum) count++;
leap = judge(d[0]);
d[2]++;
if(d[2] > h[d[1]][leap]){
d[2] = 1;
d[1]++;
}
if(d[1] > 12){
d[1] = 1;
d[0]++;
}
}
printf("%d", count);
return 0;
}
solution2
#include<iostream>
#include<cmath>
int main(){
int h[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int count = 0, y, m, d, sum, sqr;
for(int i = 1; i <= 21; i++){
sum = 0;
if((i + 2000) % 400 == 0 || ((i + 2000) % 4 == 0 && (i + 2000) % 100 != 0)) h[2] = 29;
else h[2] = 28;
for(int j = 1; j <= 12; j++){
for(int k = 1; k <= h[j]; k++){
y = 2 + i % 10 + i / 10;
m = j % 10 + j / 10;
d = k % 10 + k / 10;
sum = y + m + d;
sqr = sqrt(sum);
if(sum == sqr * sqr) count++;
}
}
}
printf("%d", count);
return 0;
}
本文含有隐藏内容,请 开通VIP 后查看