1. 程式人生 > 其它 >第二章 暴力求解(2.3 日期)

第二章 暴力求解(2.3 日期)

日期問題

例:今年的第幾天?

 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 bool
isLeapYear(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/

-------------------------------------------

個性簽名:紙上學來終覺淺,絕知此事要躬行。

如果覺得這篇文章對你有小小的幫助的話,記得在右下角點個“推薦”哦,博主在此感謝!