1. 程式人生 > >201509-2日期計算

201509-2日期計算

一、原題

問題描述
試題編號: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

二、分析

這是一道簽到題。矇蔽了,本來沒一點錯誤的,矇蔽的我改錯了。得了80。那種直覺用的把基本語法給覆蓋了。

n%400==0||(n%4==0&&n%100!=0)

這個地方我本來寫的就是這個,然後,我看到一堆0,感覺有點問題,腦殘的改成了n%400==1||(n%4==1&&n%100==0)。

1代表可整除,但是我高層思維對1的理解強過了語法理解,於是腦殘zz了。%是取餘數符號,不是能否整除函式CanDiv()。

腦子裡想的是用的更高層抽象的CanDiv()。

#include<iostream>
using namespace std;
int ry[12]={31,29,31,30,31,30,31,31,30,31,30,31};
int py[12]={31,28,31,30,31,30,31,31,30,31,30,31};
void tryrun(int y,int d){
int i=0;
int sum=0;
while(sum<d){
sum+=ry[i++];
}
cout<<i<<endl<<ry[i-1]-(sum-d);
}
void tryping(int y,int d){
int i=0;
int sum=0;
while(sum<d){
sum+=py[i++];
}
cout<<i<<endl<<py[i-1]-(sum-d);
}
bool isrun(int n){
if(n%400==0||(n%4==0&&n%100!=0))return 1;
return 0;
}
int main(){
int y,d;
cin>>y>>d;
if(isrun(y)){
tryrun(y,d);
}else{
tryping(y,d);
}
return 0;;
}