[蓝桥杯 2017 省 B] 日期题目

打印 上一主题 下一主题

主题 1811|帖子 1811|积分 5433

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
小明正在整理一批汗青文献。这些汗青文献中出现了很多日期。小明知道这些日期都在 1960 年 1 月 1 日至 2059 年 12 月 31 日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。更加贫苦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多大概的日期与其对应。
比如 02/03/04,大概是 2002 年 03 月 04 日、2004 年 02 月 03 日或 2004 年 03 月 02 日。
给出一个文献上的日期,你能帮助小明判断有哪些大概的日期对其对应吗?
输入 #
  1. 02/03/04
复制代码
输出 #
  1. 2002-03-04  
  2. 2004-02-03  
  3. 2004-03-02
复制代码
#include <iostream>
using namespace  std;
int days[13]={0,31,30,31,30,31,30,31,31,30,31,30,31};
bool check_valid(int year,int month,int day){  //重点 
    if(month==0 ||month>12){ //判断 
        return false;
        if(day==0 ||month!=2 &&day>days[month])
            return false;
            if(month==2){  //如果是二月特别情况 
                int leap=year%100!=0 &&year%4==0 ||year%400==0;
                if(day>days[2]+leap)
                return false;
            }        
    }
    return true;
}
int main(int argc, char** argv) {
    int a,b,c;
    scanf("%a/%b/%c",&a,&b,&c);
    for(int i=19600101;i<=20251231;i++){
        int year=i/1000, month=i/100%100, day=i%100; //分别取年月日 
        if(check_valid(year,month,day)){  //自定义方法,查抄是否满足条件。
            if(year%100==a && month==b &&day==c ||month==a &&day==b &&year%100==c ||day==a &&month==b &&year%100==c){ //重点 
                printf("%d-%02d-%02d\n",year,month,day);
            }
        }
    }
    return 0;
}

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

西河刘卡车医

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表