蓝桥杯每日一题2023.11.8

题目描述

题目分析

对于输入的abc我们可以以a为年也可以以c为年,将abc,cab,cba这三种情况进行判断合法性即可,注意需要排序去重,所以考虑使用set

此处为纯模拟的写法,但使用循环代码会更加简洁。

方法一:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
set<string> st;
string s[N];
int cnt;
int m[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
bool is_ren(int x)
{
	if((x % 4 == 0 && x % 100 != 0)||(x % 400 == 0))return true;
	return false;
}
int main()
{
	int a, b, c;
	scanf("%d/%d/%d",&a, &b, &c);
	//以a为年 //abc
	if(a <= 59)
	{
		//abc
		if(b <= 12 && b > 0)
		{
			int x = 2000 + a;
			if(is_ren(x))m[2] = 29;
			else m[2] = 28;
			if(c <= m[b] && c > 0)
			{
				cnt ++;
				s[cnt] = "20";
				if(a < 10)s[cnt] += "0";
				s[cnt] += (to_string(a) + "-" );
				if(b < 10)s[cnt] += "0";
				s[cnt] += (to_string (b) + "-");
				if(c < 10)s[cnt] +="0";
				s[cnt] += to_string(c);
				st.insert(s[cnt]);
			}
		}
	}
 	else if(a > 59)
	{
		//abc
		if(b <= 12 && b > 0)
		{
			int x = 1900 + a;
			if(is_ren(x))m[2] = 29;
			else m[2] = 28;
			if(c <= m[b] && c > 0)
			{
				cnt ++;
				s[cnt] = "19";
				if(a < 10)s[cnt] += "0";
				s[cnt] += to_string(a) + "-" ;
				if(b < 10)s[cnt] += "0";
				s[cnt] += to_string (b) + "-";
				if(c < 10)s[cnt] +="0";
				s[cnt] += to_string(c);
				st.insert(s[cnt]);
			}
		
		}
	}
	//以c为年 //cab, cba 
	if(c <= 59)
	{
		//cab
		if(a <= 12 && a > 0)
		{
			int x = 2000 + c;
			if(is_ren(x))m[2] = 29;
			else m[2] = 28;
			if(b <= m[a] && b > 0)
			{
				s[++ cnt] = "20";
				if(c < 10)s[cnt] += "0";
				s[cnt] += to_string(c) + "-" ;
				if(a < 10)s[cnt] += "0";
				s[cnt] += to_string (a) + "-";
				if(b < 10)s[cnt] +="0";
				s[cnt] += to_string(b);
				st.insert(s[cnt]);
			}
		
		}
		//cba
		if(b <= 12 && b > 0)
		{
			int x = 2000 + c;
			if(is_ren(x))m[2] = 29;
			else m[2] = 28;
			if(a <= m[b] && a > 0)
			{
				cnt ++;
				s[cnt] = "20";
				if(c < 10)s[cnt] += "0";
				s[cnt] += to_string(c) + "-" ;
				if(b < 10)s[cnt] += "0";
				s[cnt] += to_string (b) + "-"; 
				if(a < 10)s[cnt] +="0";
				s[cnt] += to_string(a);
				st.insert(s[cnt]);
			}	
		}
	}
	else if(c > 59)
	{
		//cab
		if(a <= 12 && a > 0)
		{
			int x = 1900 + c;
			if(is_ren(x))m[2] = 29;
			else m[2] = 28;
			if(b <= m[a] && b > 0)
			{
				cnt ++;
				s[cnt] = "19";
				if(c < 10)s[cnt] += "0";
				s[cnt] += to_string(c) + "-" ;
				if(a < 10)s[cnt] += "0";
				s[cnt] += to_string (a) + "-";
				if(b < 10)s[cnt] +="0";
				s[cnt] += to_string(b);
				st.insert(s[cnt]);
			}
			
		}
		//cba
		if(b <= 12 && b > 0)
		{
			int x = 1900 + c;
			if(is_ren(x))m[2] = 29;
			else m[2] = 28;
			if(a <= m[b] && a > 0)
			{
				cnt ++;
				s[cnt] = "20";
				if(c < 10)s[cnt] += "0";
				s[cnt] += to_string(c) + "-" ;
				if(b < 10)s[cnt] += "0";
				s[cnt] += to_string (b) + "-";
				if(a < 10)s[cnt] +="0";
				s[cnt] += to_string(a);
				st.insert(s[cnt]);
			}
		}
	}
	for(auto i : st)
	{
		cout << i << '\n';
	}
	return 0;
}

方法二:

cpp 复制代码
#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_valid(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 date = 19600101; date <= 20591231; date ++)
	{
		int year = date / 10000, month = date % 10000 / 100, day = date % 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;
}
相关推荐
小小小新人1212344 分钟前
C语言 ATM (4)
c语言·开发语言·算法
你的冰西瓜1 小时前
C++排序算法全解析(加强版)
c++·算法·排序算法
এ᭄画画的北北2 小时前
力扣-31.下一个排列
算法·leetcode
绝无仅有2 小时前
企微审批对接错误与解决方案
后端·算法·架构
趣多多代言人3 小时前
从零开始手写嵌入式实时操作系统
开发语言·arm开发·单片机·嵌入式硬件·面试·职场和发展·嵌入式
用户5040827858393 小时前
1. RAG 权威指南:从本地实现到生产级优化的全面实践
算法
Python×CATIA工业智造4 小时前
详细页智能解析算法:洞悉海量页面数据的核心技术
爬虫·算法·pycharm
无聊的小坏坏5 小时前
力扣 239 题:滑动窗口最大值的两种高效解法
c++·算法·leetcode
黎明smaly5 小时前
【排序】插入排序
c语言·开发语言·数据结构·c++·算法·排序算法