C++蓝桥杯速通(三)---常考题型年份问题

一、闰年判断

        年分问题必须会判断闰年:year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)

只要记住一个口诀:4年一润,百年不闰,400年又润。意思是每四年是一个闰年,但是100年的时候即使是4的倍数但仍然不是闰年,是400年的倍数又是闰年。

建议取官网多做题,年份题大多都很简单,而且大多数都是填空题,掌握方法轻松拿下5-10分

二、做题

1.完全日期 - 蓝桥云课

题目描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

如果一个日期中年月日的各位数字之和是完全平方数,则称为一个完全日期。

例如:20212021 年 66 月 55 日的各位数字之和为 2+0+2+1+6+5=162+0+2+1+6+5=16,而 1616 是一个完全平方数,它是 44 的平方。所以 20212021 年 66 月 55 日是一个完全日期。

例如:20212021 年 66 月 2323 日的各位数字之和为 2+0+2+1+6+2+3=162+0+2+1+6+2+3=16,是一个完全平方数。所以 20212021 年 66 月 2323 日也是一个完全日期。

请问,从 20012001 年 11 月 11 日到 20212021 年 1212 月 3131 日中,一共有多少个完全日期?

#include<iostream>
#include<string>
using namespace std;
int main()
{
	int month[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
	int all = 0,a,b,c,sum;
	for (int y = 1; y <= 21; y++)
	{
		month[2] = 28;
		if ((2000+y) % 400 == 0 || ((2000+y) % 4 == 0 && (2000+y) % 100 != 0))month[2] = 29;//闰年的时候把2月份变成29天 
		for (int m = 1; m <= 12; m++)
		{
			for (int d = 1; d <= month[m]; d++)
			{
				a = y/10+y%10;//最高也只是二位数,除以十得到十位数,取10的模得到个位 
				b = m/10+m%10;//即使是个位数除 10也为0不用担心 
				c = d/10+m%10;
				sum = 2+a+b+c;
				//年分在2001/1/1 - 2021/12/31,但是最大值是2019/9/29 ,所以总和的范围是 5---32 
				if(sum == 9||sum == 16||sum == 25)all ++;//在这个范围能被开方的就这三个数字 
			}
		}
	}
	cout<<all;
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值