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

简介: 蓝桥杯真题|02普及-真题



[蓝桥杯 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;
 }
相关文章
|
6天前
|
存储 人工智能 算法
第十四届蓝桥杯真题解析
第十四届蓝桥杯真题解析
60 0
|
6天前
|
测试技术
蓝桥杯刷题|01普及-真题
蓝桥杯刷题|01普及-真题
|
6天前
|
人工智能 算法
第十三届蓝桥杯真题解析
第十三届蓝桥杯真题解析
32 3
|
6天前
【备战蓝桥杯】——Day1
【备战蓝桥杯】——Day1
26 0
|
11月前
|
机器学习/深度学习
蓝桥杯真题练习
蓝桥杯真题练习
|
11月前
蓝桥杯真题计划(一)
蓝桥杯真题计划(一)
52 0
【蓝桥杯嵌入式】蓝桥杯第十二届省赛程序真题,真题分析与代码讲解
【蓝桥杯嵌入式】蓝桥杯第十二届省赛程序真题,真题分析与代码讲解
268 0
【蓝桥杯嵌入式】蓝桥杯第十二届省赛程序真题,真题分析与代码讲解
蓝桥杯历年真题
微生物增值 include
96 0