zoukankan      html  css  js  c++  java
  • 2.26—— 问题 B: 回文日期

    题目描述

        在日常生活中,通过年、月、日这三个要素可以表示出一个唯一确定的日期。    
        牛牛习惯用8位数字表示一个日期,其中,前4位代表年份,接下来2位代表月份,最后2位代表日期。显然:一个日期只有一种表示方法,而两个不同的日期的表示方法不会相同。    

        牛牛认为,一个日期是回文的,当且仅当表示这个日期的8位数字是回文的。现在,牛牛想知道:在他指定的两个日期之间(包含这两个日期本身),有多少个真实存在的日期是回文的。

    【提示】

        一个8位数字是回文的,当且仅当对于所有的i(1<i<8)从左向右数的第i个数字和第9-i个数字(即从右向左数的第i个数字)是相同的。   
       例如:    
        ·对于2016年11月19日,用8位数字20161119表示,它不是回文的。   
        ·对于2010年1月2日,用8位数字20100102表示,它是回文的。    
        ·对于2010年10月2日,用8位数字20101002表示,它不是回文的。    
        每一年中都有12个月份:    其中,1,  3,  5,   7,  8,      10,  12月每个月有31天;4,  6,  9,  11月每个月有30天;而对于2月,闰年时有29天,平年时有28天。       一个年份是闰年当且仅当它满足下列两种情况其中的一种:    1.这个年份是4的整数倍,但不是100的整数倍;    2.这个年份是400的整数倍。    
       例如:   
         ·以下几个年份都是闰年:2000 ,   2012 ,  2016。   
        ·以下几个年份是平年:1900,  2011、2014。
     

    输入

         输入包括两行,每行包括一个8位数字。    
        第一行表示牛牛指定的起始日期dates,第二行表示牛牛指定的终止日期date2。保证dates和date:都是真实存在的日期,且年份部分一定为4位数字,且首位数字不为0;保证date一定不晚于date2。

    输出

    输出一行,包含一个整数,表示在date1和date2之间,有多少个日期是回文的。

    样例输入

    复制样例数据

    20110101
    20111231
    

    样例输出

    1
    

    提示

    对于样例1,符合条件的日期是20111102。

    感觉这种模拟题我一直很弱。这个需要思路清晰,并且代码易看才是对的。不然容易错。

    #include <iostream>
    #include <cstdio>
    using namespace std;
    int hh[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    //每个月的天数,二月单独判断
    //判断是否是闰年;
    bool is_runnian(int n){
        if((n%4==0&&n%100!=0)||n%400==0) return true;
        return false;
    }
    //这个函数用来找此年此月多少天
    int fun(int year,int month){
        if(month==2){
            if(is_runnian(year)){
                return 29;
            }
            else return 28;
        }
        else
            return hh[month];
    }
    int main()
    {
        int n,m,i;
        int ans=0;
        cin>>n>>m;
        int a=n/10000,b=m/10000;
        int date;
        for(i=a;i<=b;i++){
    //date表示此年的回文数
            date=i*10000+i%10*1000+i%100/10*100+i%1000/100*10+i/1000;
     //如果满足这个数位于输入两个数之间,月份位于1-12,月份对应的天数没有超过范围   if(date>=n&&date<=m&&date%10000/100>0&&date%10000/100<=12&&date%100<=fun(i,date%10000/100)){
                ans++;//答案++;
            }
        }
        cout<<ans<<endl;
        return 0;
    }
  • 相关阅读:
    软件测试之测试需求
    如何做页面测试
    如何做查询测试
    如何做报表测试
    SQL server(一)变量的定义
    SQLserver中事务的使用
    Asp.Net MVC中使用中间件对要访问的页面进行Session判断
    python之numpy使用(一)
    SQL Server存储过程的简单使用
    SQLServer游标的简单使用
  • 原文地址:https://www.cnblogs.com/skyleafcoder/p/12319537.html
Copyright © 2011-2022 走看看