zoukankan      html  css  js  c++  java
  • 回文日期—题解

    题目链接: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月份的问题,题目中已经给出提示所给年份均为合法真是日期。关于平年闰年的描述其实是为了干扰做题者,所以认真审题和分析,获取有用的信息,在竞赛中尤为重要。

     

  • 相关阅读:
    【简●解】POJ 1845 【Sumdiv】
    【简●解】 LG P2730 【魔板 Magic Squares】
    团队会议01
    【随手记】原型展示+电梯演讲
    发际线总和我作队-第一次视频会议
    团队项目-记账App
    人生第一篇博客 , 当然是经典的 "Hello World"
    窗体评分系统
    优化MySchool数据库设计总结
    相关子查询
  • 原文地址:https://www.cnblogs.com/tflsnoi/p/13279325.html
Copyright © 2011-2022 走看看