回文日期—題解


題目鏈接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1974

方法一:

 

 

 

 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int i,j,y,m,d,t,date1,date2,sum=0;
 6     //i,j循環變量,y對應日期,m月倒置的數值,d日倒置的數值
 7     int  ms[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
 8      cin>>date1>>date2;//輸入起始結束日期 
 9     for (i=1;i<=12;i++) 
10     {
11         m=i%10*10+i/10;//1-12月份倒置之后的值 
12         t=ms[i];
13          for (j=1;j<=t;j++)
14         { 
15             d=j%10*10+j/10;//1-t日倒置之后的值 
16             y=(d*100+m)*10000+i*100+j;//對應回文的日期 
17              if(y>=date1&&y<=date2)
18             sum++;//判斷這個日期在不在查詢范圍內 
19         }  
20     }
21     cout<<sum<<endl;
22      return 0;
23 }

方法二:

 

 

 

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5     int date1,date2,ans=0;
 6     int  ms[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};//列出每個月份對應的最大天數,注意2月份用最大29天 
 7      cin>>date1>>date2;//輸入起始結束日期 
 8      d1=date1/10000, d2=date2/10000; //求出前四位,用年份枚舉就可以 
 9     for(int i=d1; i<=d2; i++){      //枚舉前四位年份,然后轉換成月和天 
10         int month=i%10*10+i/10%10;  //將i后兩位轉換成月份 
11         int day=i/100%10*10+i/1000; //將i前兩位轉換成天 
12         if(month<13 && ms[month]>=day)//判斷月份是否合法&&天是否合法(通過上面一維數組查詢) 
13                 ans++;
14     }
15     cout<<ans<<endl;
16      return 0;
17 }

注意:本題不需要判斷平年和潤年2月份的問題,題目中已經給出提示所給年份均為合法真是日期。關於平年閏年的描述其實是為了干擾做題者,所以認真審題和分析,獲取有用的信息,在競賽中尤為重要。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM