蓝桥杯真题|02普及-真题

目录

[蓝桥杯 2017 省 B] 日期问题

题目描述

输入格式

输出格式

输入输出样例

代码及思路

[蓝桥杯 2021 省 B] 时间显示

题目描述

输入格式

输出格式

输入输出样例

说明/提示

代码及思路


[蓝桥杯 2017 省 B] 日期问题

题目描述

小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在 1960 年 1 月 1 日至 2059 年 12 月 31 日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。

比如 02/03/04,可能是 2002 年 03 月 04 日、2004 年 02 月 03 日或 2004 年 03 月 02 日。

给出一个文献上的日期,你能帮助小明判断有哪些可能的日期对其对应吗?

输入格式

一个日期,格式是 AA/BB/CC。(0≤A,B,C≤9)

输出格式

输出若干个不相同的日期,每个日期一行,格式是 yyyy-MM-dd。多个日期按从早到晚排列。

输入输出样例

输入 #1   02/03/04

输出 #1

2002-03-04  
2004-02-03  
2004-03-02  

代码及思路

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;

//判断闰年

bool leapyear(int year)
{
	if(year%100!=0&&year%4==0)return true;
	if(year%400==0)return true;
	return false;
}
//每个月有多少天
int monthdays(int year,int month)
{
	int day=0;
	if(month==2)
	{
		if(leapyear(year))day=29;
		else day=28;
	}
		
	else if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)day=31;
	else if(month==4||month==6||month==9||month==11)day=30;
	else return 0;
	return day;
}
//打印函数
void printdate(int year,int month,int day)
{
	if(year<100&&year>=60)year=1900+year;
	if(year>=0&&year<60)year=2000+year;
	//计算月的最大天数 
	int monthday=monthdays(year,month);
	if(month>0&&month<10)
	{
		if(day>0&&day<=monthday)
		{
			if(day>0&&day<10)cout<<year<<"-0"<<month<<"-0"<<day<<endl;
			else cout<<year<<"-0"<<month<<'-'<<day<<endl;
		}
	}
	else if(month<13&&month>9)
	{
		if(day>0&&day<=monthday)
		{
			if(day>0&&day<10)cout<<year<<"-"<<month<<"-0"<<day<<endl;
			else cout<<year<<'-'<<month<<'-'<<day<<endl;
		}
	}
	else return;
 


}

int main()
{
	string arr;
	cin>>arr;
	int a=(arr[0]-48)*10+(arr[1]-48);
	int b=(arr[3]-48)*10+(arr[4]-48);
	int c=(arr[6]-48)*10+(arr[7]-48);	
	//保持顺序,也就是数值大的后打印
	if(a>c)
	{

		if(a>b) 
		{
			printdate(c,b,a);
			printdate(c,a,b);
		}
		else if (a==b)printdate(c,a,b);
		else
		{
			printdate(c,a,b);
			printdate(c,b,a);
		}
		printdate(a,b,c);
		
	}
	else if(a==c)
	{
		if(a>b)
		{
			printdate(c,b,a);
			printdate(c,a,b);
		}
		else if(a==b)printdate(a,b,c);
		else
		{
			printdate(c,a,b);
			printdate(c,b,a);
			
		}
	}
	else//a<c
	{
		printdate(a,b,c);
		if(a>b) 
		{
			printdate(c,b,a);
			printdate(c,a,b);
		}
		else if (a==b)printdate(c,a,b);
		else
		{
			printdate(c,a,b);
			printdate(c,b,a);
		}
	    
	}
	return 0; 
 } 

[蓝桥杯 2021 省 B] 时间显示

题目描述

小蓝要和朋友合作开发一个时间显示的网站。在服务器上,朋友已经获取了当前的时间,用一个整数表示,值为从 1970 年 1 月 1 日 00:00:00 到当前时刻经过的毫秒数。

现在,小蓝要在客户端显示出这个时间。小蓝不用显示出年月日,只需要 显示出时分秒即可,毫秒也不用显示,直接舍去即可。

给定一个用整数表示的时间,请将这个时间对应的时分秒输出。

输入格式

输入一行包含一个整数,表示时间。

输出格式

输出时分秒表示的当前时间, 格式形如 HH:MM:SS, 其中 HH 表示时, 值 为 00 到 23,MM 表示分。值为 00 到 59。SS 表示秒, 值为 00 到 59。时、分、秒不足两位时补前导 0 。

输入输出样例

输入 #1  46800999

输出 #1  13:00:00

输入 #2 1618708103123

输出 #2  01:08:23

说明/提示

对于所有评测用例, 给定的时间为不超过 10^{18} 的正整数。

蓝桥杯 2021 第一轮省赛 B 组 F 题。

代码及思路

 #include<iostream>
 using namespace std;
 int main()
 {
 	
 	long long int time=0;
 	cin>>time;
 	int s,m,h,num;
 	time/=1000;//将毫秒化为秒 
 	num=time%86400;//将秒归到一天之内 
 	
	h=num/3600;//这个秒里面有几个小时 
	num%=3600;
	m=num/60;
	num%=60;
	s=num;
	printf("%02d:%02d:%02d",h,m,s); 
 	
 	return 0;
 }

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值