蓝桥杯每日一题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;
}
相关推荐
会员源码网12 小时前
使用`mysql_*`废弃函数(PHP7+完全移除,导致代码无法运行)
后端·算法
木心月转码ing13 小时前
Hot100-Day10-T438T438找到字符串中所有字母异位词
算法
HelloReader14 小时前
Wi-Fi CSI 感知技术用无线信号“看见“室内的人
算法
颜酱17 小时前
二叉树分解问题思路解题模式
javascript·后端·算法
qianpeng89718 小时前
水声匹配场定位原理及实验
算法
董董灿是个攻城狮1 天前
AI视觉连载8:传统 CV 之边缘检测
算法
AI软著研究员2 天前
程序员必看:软著不是“面子工程”,是代码的“法律保险”
算法
FunnySaltyFish2 天前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack
颜酱2 天前
理解二叉树最近公共祖先(LCA):从基础到变种解析
javascript·后端·算法
地平线开发者2 天前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶