第十二届蓝桥杯大赛软件赛决赛C/C++ 研究生组-完全日期

发布于:2024-03-21 ⋅ 阅读:(78) ⋅ 点赞:(0)

在这里插入图片描述

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 后查看

网站公告

今日签到

点亮在社区的每一天
去签到