201509-2日期計算
阿新 • • 發佈:2019-01-07
一、原題
問題描述試題編號: | 201509-2 |
試題名稱: | 日期計算 |
時間限制: | 1.0s |
記憶體限制: | 256.0MB |
問題描述: | 問題描述 給定一個年份y和一個整數d,問這一年的第d天是幾月幾日? 注意閏年的2月有29天。滿足下面條件之一的是閏年: 1) 年份是4的整數倍,而且不是100的整數倍; 2) 年份是400的整數倍。輸入格式 輸入的第一行包含一個整數y,表示年份,年份在1900到2015之間(包含1900和2015)。 輸入的第二行包含一個整數d,d在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;; }