問題描述
有一類節日的日期並不是固定的,而是以“a月的第b個星期c”的形式定下來的,比如說母親節就定為每年的五月的第二個星期日。
現在,給你a,b,c和y1, y2(1850 ≤ y1, y2 ≤ 2050),希望你輸出從公元y1年到公元y2年間的每年的a月的第b個星期c的日期。
提示:關於閏年的規則:年份是400的整數倍時是閏年,否則年份是4的倍數並且不是100的倍數時是閏年,其他年份都不是閏年。例如1900年就不是閏年,而2000年是閏年。
為了方便你推算,已知1850年1月1日是星期二。
輸入格式
輸入包含恰好一行,有五個整數a, b, c, y1, y2。其中c=1, 2, ……, 6, 7分別表示星期一、二、……、六、日。
輸出格式
對於y1和y2之間的每一個年份,包括y1和y2,按照年份從小到大的順序輸出一行。
如果該年的a月第b個星期c確實存在,則以"yyyy/mm/dd"的格式輸出,即輸出四位數的年份,兩位數的月份,兩位數的日期,中間用斜杠“/”分隔,位數不足時前補零。
如果該年的a月第b個星期c並不存在,則輸出"none"(不包含雙引號)。
樣例輸入
5 2 7 2014 2015
樣例輸出
2014/05/11
2015/05/10
評測用例規模與約定
所有評測用例都滿足:1 ≤ a ≤ 12,1 ≤ b ≤ 5,1 ≤ c ≤ 7,1850 ≤ y1, y2 ≤ 2050。
這算是基本編程練習吧,一遍編譯通過
評論里指出的錯誤已經改正,原來我沒有管day=_=||
1 #include <iostream> 2 #include <vector> 3 #include <map> 4 #include <iomanip> 5 6 using namespace std; 7 8 bool isLeapYear(int year) 9 { 10 int temp = year%400; 11 if(temp==0) 12 { 13 return true; 14 } 15 else 16 { 17 temp = year%4; 18 int temp1 =year%100; 19 if(temp==0 && temp1!=0) 20 return true; 21 else 22 return false; 23 } 24 25 } 26 int days(bool leap,int month) 27 { 28 switch (month) 29 { 30 case 1: 31 return 0; 32 case 2: 33 return 31; 34 case 3: 35 return leap ? 60:59; 36 case 4: 37 return leap ? 91:90; 38 case 5: 39 return leap ? 121:120; 40 case 6: 41 return leap ? 152:151; 42 case 7: 43 return leap ? 182:181; 44 case 8: 45 return leap ? 213:212; 46 case 9: 47 return leap ? 244:243; 48 case 10: 49 return leap ? 274:273; 50 case 11: 51 return leap ? 305:304; 52 case 12: 53 return leap ? 335:334; 54 } 55 } 56 int monthDays(bool leap,int month) 57 { 58 switch (month) 59 { 60 case 1: 61 case 3: 62 case 5: 63 case 7: 64 case 8: 65 case 10: 66 case 12: 67 return 31; 68 case 4: 69 case 6: 70 case 9: 71 case 11: 72 return 30; 73 case 2: 74 return leap ? 29:28; 75 } 76 } 77 int main() { 78 int month,week,day,year1,year2,leapCount(0); 79 cin>>month>>week>>day>>year1>>year2; 80 for(int i = 1850;i<year1;i++) 81 { 82 if(isLeapYear(i)) 83 leapCount++; 84 } 85 for(int i=year1;i<=year2;i++) 86 { 87 bool leap = isLeapYear(i); 88 int totalDays = (i-1850)*365+leapCount+days(leap,month); 89 int weekDay = totalDays%7+2; 90 int weekCount = day<weekDay ? 1:2; 91 int ans = 8-weekDay+(week-weekCount)*7+day; 92 if(ans<=monthDays(leap,month)) 93 { 94 cout<<i<<"/"; 95 if(month<10) 96 cout<<0; 97 cout<<month<<"/"; 98 if(ans<10) 99 cout<<0; 100 cout<<ans<<endl; 101 } 102 else 103 cout<<"none"<<endl; 104 if(leap) 105 leapCount++; 106 } 107 return 0; 108 }