XiaoCaiJi


私信TA

用户名:hnit2023163

访问量:579

签 名:

等  级
排  名 22565
经  验 651
参赛次数 1
文章发表 3
年  龄 0
在职情况 学生
学  校 湖南工学院
专  业

  自我简介:


解题思路:

注意事项:

参考代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct RQ{
	int yyyy;
	int MM;
	int dd;
};
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
inline int isRun(int y,int m){
	if(y%4==0 && y%100!=0 || y%400==0)
		if(m==2)
			return month[m]+1;
	return month[m];
}
int a[4];
struct RQ rq[1000];
bool cmp(struct RQ rq1,struct RQ rq2){
	if(rq1.yyyy==rq2.yyyy){
		if(rq1.MM==rq2.MM)
			return rq1.dd<rq2.dd;
		return rq1.MM<rq2.MM;
	}
	return rq1.yyyy<rq2.yyyy;
}
int main(){
	int num=0;
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	scanf("%d/%d/%d",&a[1],&a[2],&a[3]);//a[2]一定不能是年份,月份一定是a[1]或者a[2] 
	int y1=a[1],y2=a[2],y3=a[3];
	//a[1]肯定<=12  a[2]肯定<=31  a[3]可能性很多 
	sort(a+1,a+3+1);
	//年月日
	//a[1]为年份
	rq[num].yyyy=2000+a[1];
	if(a[3]<=12){  //a[2],a[3]都可能是月份 
		rq[num].MM=a[2],rq[num].dd=a[3];
		rq[++num].yyyy=2000+a[1],rq[num].MM=a[3],rq[num].dd=a[2];
		num++;
	}
	else if(a[3]>12){
		if(a[3]<=isRun(2000+a[1],a[2]))
			rq[num].MM=a[2],rq[num].dd=a[3],num++;
	}
	//a[2]为年份
	rq[num].yyyy=2000+a[2];
	if(a[3]<=12){  //a[3],a[1]都可能是月份 
		rq[num].MM=a[1],rq[num].dd=a[3];
		rq[++num].yyyy=2000+a[2],rq[num].MM=a[3],rq[num].dd=a[1];
		num++;
	}
	else if(a[3]>12){
		if(a[3]<=isRun(2000+a[2],a[1]))
			rq[num].MM=a[1],rq[num].dd=a[3],num++;
	}
	//a[3]为年份
	if(a[3]>=60){
	 	rq[num].yyyy=1900+a[3];
	 	if(a[2]>12){ 
	 		if(a[2]<=isRun(1900+a[3],a[1]))
	 			rq[num].MM=a[1],rq[num].dd=a[2];
	 		//num++;
		}
		else if(a[2]<=12){ //a[2],a[1]都可能是月份 
			rq[num].MM=a[1],rq[num].dd=a[2];
			rq[++num].yyyy=1900+a[3],rq[num].MM=a[2],rq[num].dd=a[1];
			//num++;
		}
	}
	else if(a[3]<60){
		rq[num].yyyy=2000+a[3];
	 	if(a[2]>12){ 
	 		if(a[2]<=isRun(2000+a[3],a[1]))
	 			rq[num].MM=a[1],rq[num].dd=a[2];
	 		//num++;
		}
		else if(a[2]<=12){ //a[2],a[1]都可能是月份 
			rq[num].MM=a[1],rq[num].dd=a[2];
			rq[++num].yyyy=2000+a[3],rq[num].MM=a[2],rq[num].dd=a[1];
			//num++;
		}
	}
	sort(rq,rq+num+1,cmp);
	//便于理解,可以看到重复的日期 
	/*
	for(int i=0;i<=num;i++){
		cout << rq[i].yyyy << '-' << rq[i].MM << '-' << rq[i].dd << endl;
	}
	*/
	for(int i=0;i<=num;i++){
		if(rq[i].MM!=0 && rq[i].dd!=0) //月份和日期不能为0 
			if(rq[i].yyyy%100!=y2 || y1==y2 || y3==y2){ //按道理第二个不能为年份,但是如果其他两个存在与之相等,则可以 
				if(rq[i].MM==y1 || rq[i].MM==y2){
					if(rq[i].yyyy==rq[i-1].yyyy && rq[i].MM==rq[i-1].MM && rq[i].dd==rq[i-1].dd);//去重 
					else{
						cout << rq[i].yyyy << '-';
						if(rq[i].MM<10)
							cout << '0' << rq[i].MM << '-';
						else
							cout << rq[i].MM << '-';
						if(rq[i].dd<10)
							cout << '0' << rq[i].dd << endl;
						else
							cout << rq[i].dd << endl;
					}
				}
			}
	}
	return 0;
}


 

0.0分

3 人评分

  评论区

  • «
  • »