zoukankan      html  css  js  c++  java
  • (未完成的)日期问题

    问题描述

      小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在1960年1月1日至2059年12月31日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。


      比如02/03/04,可能是2002年03月04日、2004年02月03日或2004年03月02日。


      给出一个文献上的日期,你能帮助小明判断有哪些可能的日期对其对应吗?
    输入格式
      一个日期,格式是"AA/BB/CC"。 (0 <= A, B, C <= 9)
    输出格式
      输出若干个不相同的日期,每个日期一行,格式是"yyyy-MM-dd"。多个日期按从早到晚排列。
    样例输入
    02/03/04
    样例输出
    2002-03-04
    2004-02-03
    2004-03-02
    数据规模和约定
      峰值内存消耗(含虚拟机) < 256M
      CPU消耗 < 1000ms

    Algorithm

    遇到这种题,我内心是拒绝的~~~
    考虑了大部分情况,还是有些特殊数据没有处理好,先放一放了!

    未完成的AC

      1 #include<iostream>
      2 #include<algorithm>
      3 #include<string>
      4 #include<cstdio>
      5 
      6 using namespace std;
      7 
      8 bool isLeap(int year)
      9 {
     10     return ((year%4 == 0 && year%100 != 0) || (year%400 == 0));
     11 }
     12 
     13 void solve(int x, int y, int z)
     14 {
     15     if(x>31)
     16         printf("20%02d-%02d-%02d
    ", x, y, z);
     17     else if(x == 0 || z == 0){// 情况复杂....... 
     18         if(x==0)
     19             printf("20%02d-%02d-%02d
    ", x, y, z);
     20         else{
     21             int a=x>y?x:y;
     22             int b=x<y?x:y;
     23             if(a!=b){
     24                 printf("20%02d-%02d-%02d
    ", z, b, a);
     25                 printf("20%02d-%02d-%02d
    ", z, a, b);
     26             }
     27             else
     28                 printf("20%02d-%02d-%02d
    ", z, x, x);    
     29         }
     30     }
     31     else if(z>31){    // 日月年 或 月日年 
     32         if(x>12){    // 日月年 
     33             printf("20%02d-%02d-%02d
    ", z, y, x);
     34         }
     35         else if(y>12){    //月日年 
     36             printf("20%02d-%02d-%02d
    ", z, x, y);
     37         }
     38         else{
     39             int a=x>y?x:y;
     40             int b=x<y?x:y;
     41             if(b==a){
     42                 printf("20%02d-%02d-%02d
    ", z, b, a);
     43             }
     44             else{
     45                 printf("20%02d-%02d-%02d
    ", z, b, a);
     46                 printf("20%02d-%02d-%02d
    ", z, a, b);
     47             }
     48             
     49         }
     50     }
     51     else if(x>12){    // 日月年 
     52         printf("20%02d-%02d-%02d
    ", z, y, x);
     53     }
     54     else if(x<=12){    // 三种 
     55         if(y>12){    // 
     56             printf("20%02d-%02d-%02d
    ", z, x, y);
     57         }
     58         else if(x != 2 || y != 2){     // 先排除 2 月 
     59             int a[3];a[0]=x;a[1]=y;a[2]=z;
     60             sort(a, a+3);
     61             if(x=y=z)
     62                 printf("20%02d-%02d-%02d
    ", x, y, z);
     63                 return;
     64             if(x == y){
     65                 printf("20%02d-%02d-%02d
    ", x, y, z);
     66                 printf("20%02d-%02d-%02d
    ", z, x, y);
     67                 return;
     68             }
     69             if(x == z){
     70                 printf("20%02d-%02d-%02d
    ", x, y, z);
     71                 printf("20%02d-%02d-%02d
    ", x, z, y);
     72                 return;
     73             }
     74             printf("20%02d-%02d-%02d
    ", a[0], a[1], a[2]);
     75             printf("20%02d-%02d-%02d
    ", a[2], a[0], a[1]);
     76             printf("20%02d-%02d-%02d
    ", a[2], a[1], a[0]);
     77         }
     78         else{ // 考虑闰年和平年的条件 
     79             if(!isLeap(2000+x) && z == 29){ // 如果是闰年 
     80                  printf("20%02d-%02d-%02d
    ", z, x, y);
     81             }
     82             else{
     83                 printf("20%02d-%02d-%02d
    ", z, x, y);
     84                 printf("20%02d-%02d-%02d
    ", x, y, z);
     85             }
     86         }
     87     }
     88     
     89 }
     90 
     91 int main()
     92 {
     93     string t;
     94     cin>>t;
     95     int x, y, z;
     96     // 02/03/04
     97     x = int(t.at(0)-'0')*10 + int(t.at(1)-'0');
     98     y = int(t.at(3)-'0')*10 + int(t.at(4)-'0');
     99     z = int(t.at(6)-'0')*10 + int(t.at(7)-'0');
    100     // 年 /  月  /日
    101     // 月 /  日  /年
    102     // 日 /  月  /年
    103     solve(x, y, z);
    104     // printf("20%02d-%02d-%02d
    ", x, y, z);
    105     
    106     return 0;
    107 }
    View Code
     
  • 相关阅读:
    求公约数和比值
    HTML5 文件上传
    js判断是pc还是移动端
    ssm整合
    如何获取数据表中自增主键的值
    MyBatis全局配置文件标签详解
    MyBatis介绍及使用
    基于Spring MVC的文件上传和下载功能的实现
    Spring IOC容器交给application域对象管理
    SpringMVC的简单介绍及使用
  • 原文地址:https://www.cnblogs.com/mabeyTang/p/9982498.html
Copyright © 2011-2022 走看看