九度-題目1186:打印日期

題目1186:打印日期

時間限制:1 秒

內存限制:32 兆

特殊判題:

提交:7047

解決:2447

題目描述:

給出年分m和一年中的第n天,算出第n天是幾月幾號。

輸入:

輸入包括兩個整數y(1<=y<=3000),n(1<=n<=366)。

輸出:

可能有多組測試數據,對於每組數據,
按 yyyy-mm-dd的格式將輸入中對應的日期打印出來。

樣例輸入:
2000 3
2000 31
2000 40
2000 60
2000 61
2001 60
樣例輸出:
2000-01-03
2000-01-31
2000-02-09
2000-02-29
2000-03-01
2001-03-01
來源:
2003-2005年華中科技大學計算機研究生機試真題
答疑:
解題遇到問題?分享解題心得?討論本題請訪問:http://t.jobdu.com/thread-7909-1-1.html

思路也是類似,閏年判斷,求和,格式輸出,值得注意的是,最後的輸出是YYYY-MM-DD的格式,所以要%04d%02d%02d纔可以通過,上代碼:
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int leap(int y){
	if(y%400==0)
	return 1;
	else if(y%100==0)
	return 0;
	else if(y%4==0)
	return 1;
	else return 0;
}
int main(){
	int day1[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
	int day2[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
	
	int y,n;
	while(cin>>y>>n){
		
		if(leap(y)){
				int sum=0;int m,d;
			for(int i=1;i<13;i++){
			
			
				sum+=day2[i];
				
				if(sum>=n){
				m=i;
				d=n-(sum-day2[i]);
				
				break;
				}
				
			}
			printf("%04d-%02d-%02d\n",y,m,d);
		}
		else{
			int sum=0;int m,d;
			for(int i=1;i<13;i++){
			
				
				sum+=day1[i];
				
				if(sum>=n){
				m=i;
				d=n-(sum-day1[i]);
				
				break;
				}
				
			}
			printf("%04d-%02d-%02d\n",y,m,d);
		}
	}
	return 0;
}


總結,輸出格式問題。
發佈了26 篇原創文章 · 獲贊 14 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章