蓝桥杯2012年省赛——猜生日

这篇文章描述了一个编程问题,题目要求根据特定条件(出生年月日形成的8位数能被2012年3月12日整除且叔叔出生于6月)计算出叔叔的出生日期,代码通过不断迭代检查每个可能的日期来找到答案,最终得出叔叔出生于1955年6月4日。
摘要由CSDN通过智能技术生成

题目描述

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

今年的植树节(2012 年 3 月 12日),小明和他的叔叔还有小伙伴们一起去植树。休息的时候,小明的同学问他叔叔多大年纪,他叔叔说:“我说个题目,看你们谁先猜出来!”

“把我出生的年月日连起来拼成一个 8位数(月、日不足两位前补 0)正好可以被今天的年、月、日整除!”

他想了想,又补充到:“再给个提示,我是 6 月出生的。”

根据这些信息,请你帮小明算一下,他叔叔的出生年月日。

格式是年月日连成的 88 位数。例如,如果是 1948 年 6 月 12 日,就写:19480612。

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 128M

【代码注释】

#include<bits/stdc++.h>
using namespace std;
int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool check(int n)
{
	if(n%4==0&&n%100!=0||(n%400)==0)
		return true;
	return false;
}
int main()
{
	int year,month,day;
	int birth=19000101;
	while(1)
	{
		if(birth%2012==0&&birth%12==0&&month==6)
		{
			break;
		}//找到了就返回 
		birth++;
		year=birth/10000;
		month=birth/100%100;
		day=birth%100;
		if(day>m[month])
		{
			month++;
			if(month>12)
			{
				year++;
				if(check(year))
					m[2]=29;
				else
					m[2]=28;
				month=1;
				day=1;
			}
			else
			{
				day=1;
			}
			birth=year;
			birth=birth*100+month;
			birth=birth*100+day;
		}
	}
	cout<<birth;
	return 0;
}

【答案】19550604

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值