第二章 暴力求解(2.3 日期)
阿新 • • 發佈:2022-03-06
日期問題
例:今年的第幾天?
1 /* 2 目標:日期問題(今年第幾天) 3 作者:admin 4 時間:2022/3/4 5 */ 6 7 #include<iostream> 8 #include<cstdio> 9 10 using namespace std; 11 12 int dayTab[2][13] = {{0,31,28,31,30,31,30,31,31,30,31,30,31}, 13 {0,31,29,31,30,31,30,31,31,30,31,30,31}}; //預處理 14 boolisLeapYear(int year) 15 { 16 return ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)); 17 }//判斷是否是閏年 18 19 int main() 20 { 21 int year,month,day; 22 while(scanf("%d %d %d", &year, &month, &day) != EOF){ 23 int number = 0; //記錄天數 24 for(int i = 0; i < month; ++i){25 number += dayTab[isLeapYear(year)][i]; 26 }//逐月增加天數 27 printf("%d\n",number + day); 28 } 29 return 0; 30 }
例:列印日期
1 /* 2 目標:列印日期 3 作者:admin 4 時間:2022/3/4 5 */ 6 #include<iostream> 7 #include<cstdio> 8 9 using namespace std; 10 11 int dayTab[2][13] = {{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}}; //預處理 12 13 bool isLeapYear(int year){ 14 return ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0); 15 } 16 int main() 17 { 18 int year, month, day; 19 while(scanf("%d%d", &year, &day) != EOF){ 20 int row = isLeapYear(year); 21 month = 0; //初始化月 22 while(day > dayTab[row][month]){ 23 day -= dayTab[row][month]; 24 month++; 25 } 26 printf("%04d-%02d-%02d\n", year, month, day); 27 } 28 return 0; 29 }
例:日期累加
1 /* 2 目標:實現日期累加 3 作者:admin 4 時間:2022/3/4 5 */ 6 7 #include<iostream> 8 #include<cstdio> 9 10 using namespace std; 11 12 int dayTab[2][13] = {{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}}; //預處理 13 14 bool isLeapYear(int year) 15 { 16 return ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)); //判斷是否為閏年 17 } 18 19 int NumberOfYear(int year) //返回該年天數 20 { 21 if(isLeapYear(year)) 22 return 366; 23 else 24 return 365; 25 } 26 27 int main() 28 { 29 int year,month,day; 30 int number; //記錄天數 31 int n; //組數 32 scanf("%d", &n); 33 while(n--){ 34 scanf("%d%d%d%d", &year, &month, &day, &number); 35 int row = isLeapYear(year); 36 for(int i = 0; i < month; ++i){ 37 number += dayTab[row][i]; 38 } 39 number += day; 40 while(number > NumberOfYear(year)){ 41 number -= NumberOfYear(year); 42 year++;} //確定年數 43 month = 0; 44 row = isLeapYear(year); 45 while(number > dayTab[row][month]){ 46 number -= dayTab[row][month]; 47 month++; //確定月 48 } 49 day = number; //確定日 50 printf("%04d-%02d-%02d\n", year, month, day); 51 } 52 return 0; 53 }作者:kali 出處:http://www.cnblogs.com/tqqnb/
-------------------------------------------
個性簽名:紙上學來終覺淺,絕知此事要躬行。
如果覺得這篇文章對你有小小的幫助的話,記得在右下角點個“推薦”哦,博主在此感謝!