蓝桥杯刷题——日期问题(暴力搜索)

189 阅读3分钟

「这是我参与2022首次更文挑战的第17天,活动详情查看:2022首次更文挑战」。

日期一类的问题,蓝桥杯近几年好像都有出,这类题目实际上并不难,一般都可以用暴力搜索找出答案,但自己的算法设计一定要合理,不要出现判断出错的情况,不然答案很可能是错的。

题目

image.png

思路

给一个字符串形式的数据,然后判断是否存在可能的日期与之对应。因为他输入的格式,我们是不能够去判断的,我们首先肯定是要把这个字符串切割,然后换成我们需要的int类型来判断,这里可用到substr函数以及atoi函数,substr函数就是可以将str类型的一些字符给取出来,二atoi函数就是可以将str类型的数字转换成int类型的数字。给定的数据,一共有三种情况,我们就把这三种情况都去试一试,如果存在,可又转换成str类型,因为最后输出用这个输出方便一些,最后还要将日期从早到晚输出,我们还需比较一下。我们用两个数组来分别存储闰年和非闰年的月份日数,根据年份是否为闰年然后来判断他的日子数和月份数是否能对上,这样判断即可。因为只有三种情况,全部列出,不用考虑时间复杂度。能想到这些,这道题应该已经可以得出答案了。然后就是设计程序了,这里一定要想的缜密一些,不要出错,一般就能pass了。

代码

#include <bits/stdc++.h>
using namespace std;
int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int m2[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int main()
{
  string date;
  cin>>date;
  string str1,str2,str3;
  str1=date.substr(0,2);
  str2=date.substr(3,2);
  str3=date.substr(6,2);
  int t=atoi(str1.c_str());
  int t1=atoi(str2.c_str());
  int t2=atoi(str3.c_str());
  string S,S1,S2;
  S=S1=S2="a";    
  if(t%4==0&&t1<=12)
  { 
    if(t2<=m2[t1]&&t2!=0){
        if(t<60)
        S=string("20")+str1+'-'+str2+'-'+str3; 
        else
        S=string("19")+str1+'-'+str2+'-'+str3; 
    }
  }
  if(t%4!=0&&t1<=12)
  {
    if(t2<=m[t1]&&t2!=0){
        if(t<60)
        S=string("20")+str1+'-'+str2+'-'+str3;
        else
        S=string("19")+str1+'-'+str2+'-'+str3; 
    }
  }
  if(t2%4==0&&t<=12){
    if(t1<=m2[t]&&t1!=0){
        if(t2<60)
        S1=string("20")+str3+'-'+str1+'-'+str2;
        else
        S1=string("19")+str3+'-'+str1+'-'+str2;
    }
  }
  if(t2%4!=0&&t<=12){
    if(t1<=m[t]&&t1!=0){
        if(t2<60)
        S1=string("20")+str3+'-'+str1+'-'+str2;
        else
        S1=string("19")+str3+'-'+str1+'-'+str2;
    }
  }
  if(t2%4==0&&t1<=12){
    if(t<=m2[t1]&&t!=0){
        if(t2<60)
        S2=string("20")+str3+'-'+str2+'-'+str1;
        else
        S2=string("19")+str3+'-'+str1+'-'+str2;
    }
  }
  if(t2%4!=0&&t1<=12){
    if(t<=m[t1]&&t!=0){
        if(t2<60)
        S2=string("20")+str3+'-'+str2+'-'+str1;
        else
        S2=string("19")+str3+'-'+str1+'-'+str2;
    }
  }
  string ss[3];
  if(S==S2)
  S2="a";
  if(S==S1)
  S1="a";
  if(S1==S2)
  S2="a";
  ss[0]=S;
  ss[1]=S1;
  ss[2]=S2;
  sort(ss,ss+3);
  for(int i=0;i<3;i++){
      if(ss[i]!="a")
      cout<<ss[i]<<endl;
  }
}