目录
[蓝桥杯 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
说明/提示
对于所有评测用例, 给定的时间为不超过 的正整数。
蓝桥杯 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;
}