文章

15

粉丝

68

获赞

0

访问

8.0k

头像
打印日期 题解:遍历题,注意break,不break在输入2000 31的时候会错误
P1410 华中科技大学机试题
发布于2024年4月6日 09:54
阅读数 477

这种题的本质就是单纯的顺序检索题,这个代码还可以优化,就是不用day,直接在else情况下break,此时输出为year,month,n,注意输出的格式 

#include <bits/stdc++.h>
using namespace std;

int isLeap(int year){
	if(year%400==0||(year%4==0&&year%100!=0)){
		return 1;
	}else return 0;
}

int main(){
	int year,n;
	int monthdata[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},
						  {0,31,29,31,30,31,30,31,31,30,31,30,31}};
	while(scanf("%d %d",&year,&n)!=EOF){
		int a=isLeap(year);
		int month=1;int day=0;
		for(int i=1;i<13;i++){
			if(n>monthdata[a][i]){
				n-=monthdata[a][i];
				month++;
			}else{
				day=n;
				break;
			}
		}
		printf("%04d-%02d-%02d\n",year,month,day);
	}
	return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发