CCF認證 201509-2 日期計算 100分(2種方法)C++

試題編號: 201509-2
試題名稱: 日期計算
時間限制: 1.0s
內存限制: 256.0MB
問題描述:

問題描述

  給定一個年份y和一個整數d,問這一年的第d天是幾月幾日?
  注意閏年的2月有29天。滿足下面條件之一的是閏年:
  1) 年份是4的整數倍,而且不是100的整數倍;
  2) 年份是400的整數倍。

輸入格式

  輸入的第一行包含一個整數y,表示年份,年份在1900到2015之間(包含1900和2015)。
  輸入的第二行包含一個整數dd在1至365之間。

輸出格式

  輸出兩行,每行一個整數,分別表示答案的月份和日期。

樣例輸入

2015
80

樣例輸出

3
21

樣例輸入

2000
40

樣例輸出

2
9

C++實現:

方法一:

解題技巧:將每個月的天數存放在一個數組裏

#include<iostream>
using namespace std;

int main()
{
	int y,d,month,day,sum=0;
	int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
	cin>>y;
	if( y>1899 && y<2016 )
		cin>>d;
	else
		cout<<"error!"<<endl;
	day=d;
	if((y%4==0&&y%100!=0)||(y%400==0))    //閏年
		m[2]++;

	for(int i=0;i<13;i++)
	{
		sum+=m[i];  
		if(d<=sum)
		{	
			month=i;
			break;
		}
		day-=m[i];
	}
	cout<<month<<endl<<day<<endl;
	return 0;
}

方法二

如果考試時想不出來做題的技巧,可以採用這種笨辦法,自己筆算,然後直接輸入代碼所需的數值

#include<iostream>
using namespace std;

int main()
{
	int y,d,month,day;
	cin>>y;
	if(y>1899&&y<2016)
		cin>>d;
	else
		cout<<"error!"<<endl;
	if(d<32)    //第一個月
	{	month=1;day=d;}
	else if((y%4==0&&y%100!=0)||(y%400==0))    //閏年
	{
		if(d<61)
		{month=2;day=d-31;}
		else if(d<92)
		{month=3;day=d-60;}
		else if(d<122)
		{month=4;day=d-91;}
		else if(d<153)
		{month=5;day=d-121;}
		else if(d<183)
		{month=6;day=d-152;}
		else if(d<214)
		{month=7;day=d-182;}
		else if(d<245)
		{month=8;day=d-213;}
		else if(d<275)
		{month=9;day=d-244;}
		else if(d<306)
		{month=10;day=d-274;}
		else if(d<336)
		{month=11;day=d-305;}
		else if(d<367)
		{month=12;day=d-335;}
	}
	else    //平年
	{
		if(d<60)
		{month=2;day=d-31;}
		else if(d<91)
		{month=3;day=d-59;}
		else if(d<121)
		{month=4;day=d-90;}
		else if(d<152)
		{month=5;day=d-120;}
		else if(d<182)
		{month=6;day=d-151;}
		else if(d<213)
		{month=7;day=d-181;}
		else if(d<244)
		{month=8;day=d-212;}
		else if(d<274)
		{month=9;day=d-243;}
		else if(d<305)
		{month=10;day=d-273;}
		else if(d<335)
		{month=11;day=d-304;}
		else if(d<366)
		{month=12;day=d-334;}
	}
	cout<<month<<endl<<day<<endl;
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章