日期问题(枚举)

1229. 日期问题

题意描述:
在这里插入图片描述
在这里插入图片描述
方法一:
优点:容易理解,容易想出;
缺点:需要debug,代码较多;

#include<iostream>
#include<algorithm>
#include<cstdio>

using namespace std;

int days[]={0,31,0,31,30,31,30,31,31,30,31,30,31};
struct node{
	int year,mou,day;
}ans[4];

bool cmp(node a,node b){
	if(a.year != b.year ) return a.year < b.year ;
	if(a.mou != b.mou ) return a.mou <b.mou ;
	return a.day <b.day ;
}

bool check(int year, int mou ,int day)
{
	if(mou<1||mou>12) return false;
	if(day<1||day>31) return false;
	if((year%4==0&&year%100!=0)||year%400==0) {
		if(mou==2 && day<=29) return true;
	}
	else if(mou==2 && day<=28) return true;
	
	if(day<=days[mou]) return true;
	return false;
}

int main()
{
	int a,b,c;
	scanf("%2d/%2d/%2d",&a,&b,&c);
	int k=0;
	if(a>=60){
		if(check(a+1900,b,c))  ans[k].year = a+1900,ans[k].mou =b,ans[k++].day = c;
	}
	else if(check(a+2000,b,c))  ans[k].year = a+2000,ans[k].mou =b,ans[k++].day = c;
	
	if(c>=60) {
		if( a!=c && check(c+1900,a,b)) ans[k].year = c+1900,ans[k].mou =a,ans[k++].day = b;
		if(a!=b && check(c+1900,b,a)) ans[k].year = c+1900,ans[k].mou =b,ans[k++].day = a;
	}
	else {
		if(a!=c && check(c+2000,a,b)) ans[k].year = c+2000,ans[k].mou =a,ans[k++].day = b;
		if(a!=b && check(c+2000,b,a)) ans[k].year = c+2000,ans[k].mou =b,ans[k++].day = a;
	}
	sort(ans,ans+k,cmp);
	for(int i=0;i<k;i++)
	printf("%d-%02d-%02d\n",ans[i].year ,ans[i].mou ,ans[i].day );
	
	return 0;
}

方法二:
优点:出错率低,较易调试,代码好写;

#include<bits/stdc++.h>
using namespace std;
int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

bool check(int year, int month, int day)
{
    if (month == 0 || month > 12) return false;
    if (day == 0) return false;
    if (month != 2)
    {
        if (day > days[month]) return false;
    }
    else
    {
        int leap = year % 100 && year % 4 == 0 || year % 400 == 0;
        if (day > 28 + leap) return false;
    }
    return true;
}

int main()
{
    int a,b,c;
    scanf("%d/%d/%d",&a,&b,&c);
    for(int i=19600101;i<=20591231;i++)		//核心操作;
    {
        int year=i/10000,month=i%10000/100,day=i%100;
        if(check(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;
}
发布了31 篇原创文章 · 获赞 2 · 访问量 1462

猜你喜欢

转载自blog.csdn.net/weixin_44851176/article/details/104189310
今日推荐