(2015)第六届蓝桥杯省赛(软件类) C/C++ 大学A组 题解(第二题)

时间:2022-09-09 21:38:44

第二题 

题目

星系炸弹
在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。
每个炸弹都可以设定多少天之后爆炸。
比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。
有一个贝塔炸弹,2014年11月9日放置,定时为1000天,请你计算它爆炸的准确日期
请填写该日期,格式为 yyyy-mm-dd  即4位年份2位月份2位日期。比如:2015-02-19

请严格按照格式书写。不能出现其它文字或符号。

思路分析

首先要判断闰年啊,主程序一遍for循环1000天,每次天数++的时候,同步更新日子、月份、年份。

代码

#include <iostream>
#include<cstdio>
using namespace std;


bool IsLeapYear(int year){//判断是否是闰年 
	if((year%4==0)&&(year%100!=0)||(year%400==0)){
		return true;
	}
	else
	    return false;
}

int main(int argc, char** argv) {
	int monthDay[12]={31,28,31,30,31,30,31,31,30,31,30,31};
	int year,month,day;//输入的起始年月日 
	int ndays;//增加的天数 
	while(cin>>year>>month>>day){//2014 11 9
	    cin>>ndays;//1000
		for(int i=0;i<ndays;i++){
			day++;
			if(day>monthDay[month-1]){//若日数大于当前月份的日数 
				day=1;
				month++;
				if(month>12){
					month=1;
					year++;
					if(IsLeapYear(year)){//若是闰年 
						monthDay[1]=29;//闰年2月份为29天 
					}
					else{
						monthDay[1]=28;
					}
				}
			}
		} 
	    printf("%d-%d-%d",year,month,day);
	}
	return 0;
}

结果

(2015)第六届蓝桥杯省赛(软件类) C/C++ 大学A组 题解(第二题)