【日期、时间】

知识框架

No.0 筑基

请先学习下知识点,道友!
题目知识点大部分来源于此:

No.1 年份处理

题目来源:PTA-L1-033 出生年

题目描述:
在这里插入图片描述

题目思路:

题目代码:

//对于N要进行适应性的更改,对于字段错误
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define N 100100
long long n,m,k,g,d,t;
int x,y,z;
char ch;
string str;
vector<int>v[N];


int check(int year){
	int book[13]={0};
	for(int i=0;i<4;i++){
		book[year%10]=1;
		year=year/10;
	}
	int sum=0;
	for(int i=0;i<=9;i++){
		if(book[i]>0)sum++;
	}
	return sum;
}
int main() {
	int year;
	cin>>year>>n;
	for(int i=0;;i++){
		if(check(i+year)==n){
			cout<<i;
			printf(" %04d",year+i);
			break;
		}
	}

	return 0;
}


题目来源:PTA-L1-042 日期格式化

题目描述:
在这里插入图片描述

题目思路:

题目代码:

#include <bits/stdc++.h>

using namespace std;

int main()
{

    string mei;
    cin>>mei;
    string nian,yue,ri;
    nian=mei.substr(6,4);
    yue=mei.substr(0,2);
    ri=mei.substr(3,2);
    cout<<nian<<'-'<<yue<<'-'<<ri<<endl;


    return 0;
}

题目来源:PTA-L1-075 强迫症

题目描述:
在这里插入图片描述

题目思路:

题目代码:

#include <bits/stdc++.h>
using namespace std;
int xin[24];
int main() {

    string str;
    cin>>str;
    if(str.size()==4){
        if((str[0]-'0'==2 &&str[1]-'0'>=2) || (str[0]-'0'>2)){
            cout<<19<<str[0]<<str[1]<<"-"<<str[2]<<str[3]<<endl;
        }else{
            cout<<20<<str[0]<<str[1]<<"-"<<str[2]<<str[3]<<endl;
        }
    }else{
        cout<<str[0]<<str[1]<<str[2]<<str[3]<<"-"<<str[4]<<str[5]<<endl;
    }
    return 0;
}

题目来源:Acwing-3391-今年的第几天?

题目描述:
在这里插入图片描述

题目思路:

题目代码:

//对于N要进行适应性的更改,对于字段错误
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define N 100100
long long n,m,k,g,d,t;
int x,y,z;
char ch;
string str;
vector<int>v[N];

int day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int sumday(int y,int m,int d){
    int res=0;
    for(int i=0;i<m;i++){
        res=res+day[i];
    }
    res=res+d;
    if((y%4==0&&y%100!=0)||(y%400==0)){
        if(m>2)res++;
    }
    return res;
}
int main() {
    int y,m,d;
    while(cin>>y>>m>>d){
        cout<<sumday(y,m,d)<<endl;
    }
	return 0;
}

题目来源:蓝桥杯-第十四届模拟-第一期 晨跑

题目描述:
在这里插入图片描述

题目思路:

对每一天进行模拟遍历

题目代码:

#include<bits/stdc++.h>


using namespace std;
typedef long long ll;
int d[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

int main() {
    int ans = 0;
    int week = 6;
    for (int i = 1; i <= 12; i++) {
        for (int j = 1; j <= d[i]; j++) {
            if (week == 6 || week == 0 || j == 1 || j == 11 || j == 21 || j == 31) {
                ans++;
            }
            week++;
            week = week % 7;
        }
    }
    cout << ans << endl;
    return 0;
}

题目来源:蓝桥杯-第十四届模拟-第三期 相等日期

题目描述:
在这里插入图片描述

题目思路:

题目代码:

//对于N要进行适应性的更改,对于字段错误
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define N 100100
long long n,m,k,g,d,t;
int x,y,z;
char ch;
string str;
vector<int>v[N];

int day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};


int check(int year){
	if((year%4==0&&year%100!=0)||(year%400==0)){
		return 1;
	}else{
		return 0;
	}
}
int sumhe(int x){
	int sum=0;
	for(int i=0;i<4;i++){
		sum+=x%10;
		x=x/10;
	}
	return sum;
}

int main() {
	int y,m,d;
	int res=0;
	for(y=1900;y<=9999;y++){
		if(check(y)){
			day[2]=29;
		}else{
			day[2]=28;
		}
		for(m=1;m<=12;m++){
			for(d=1;d<=day[m];d++){
				
				if(sumhe(y)==sumhe(m)+sumhe(d))res++;
			}
		}
	}
	cout<<res<<endl;
	
	return 0;
}




题目来源:蓝桥杯-2012省赛-猜生日

题目描述:

在这里插入图片描述

题目思路:

题目代码:

#include <iostream>
using namespace std;
int main()
{
  // 请在此输入您的代码
  for(int i = 19000101;i<20120312;i++)
  {
    int year = i/10000;
    int month = i/100 % 100;
    int day = i%100;
    if(i%2012 == 0 && month==6 && day<30)
    {
      if(i%3 == 0)
      {
        if(i%12 == 0)
        {
          printf("%d\n",i);
        }
      }
    }
  }
  return 0;
}

题目来源:蓝桥杯-2015省赛-星系炸弹

题目描述:

在这里插入图片描述

题目思路:

题目代码:

#include <bits/stdc++.h>
using namespace std;
int main(){
    int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    int y=2014,d=9,m=11,w;
    for(w=0;w<1000;w++){
      if((y%4==0&&y%100!=0)||(y%400==0)) mon[2]=29;
      else  mon[2]=28;
      d++;
      if(d>mon[m]){
        d=1;
        m++;
      }
      if(m>12){
        y++;
        m=1;
      }
    }
    printf("%04d-%02d-%02d",y,m,d);
    return 0;
}

No.2 一天内时间处理

题目来源:PTA-L1-018 大笨钟

题目描述:
在这里插入图片描述

题目思路:

题目代码:

#include<iostream>

using namespace std;
int main()
{    
	int h=0,m=0;
	char temp=':';    
	cin>>h>>temp>>m;    
	int count=h-12;    
	if(m>0)    
	{        
		count+=1;    
	}    
	if(count<=0)    
	{        
		printf("Only %02d:%02d.  Too early to Dang.",h,m);    
	}    
	else    
	{        
		for(int i=0;i<count;i++)        
		{            
			cout<<"Dang";        
		}     
	} 
} 

题目来源:PTA-L2-042 老板的作息表

题目描述:
在这里插入图片描述

题目思路:

题目代码:

//对于N要进行适应性的更改,对于字段错误
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define N 505
int n,m,k,g,d;
int x,y,z;
char ch;
string str;
vector<int>v[N];

set<int>timet;
int vis[24*3601];
int main() {
	
	//vis[j]  表示 以j为结尾的是否 已经在了;
	int hh,mm,ss;
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>hh>>ch>>mm>>ch>>ss;
		timet.insert(hh*3600+mm*60+ss);
		cin>>ch;
		cin>>hh>>ch>>mm>>ch>>ss;
		timet.insert(hh*3600+mm*60+ss);
		vis[hh*3600+mm*60+ss]=1;
	}
	vector<int>ans;
	
	for(auto ii:timet)ans.push_back(ii);
	
	vis[0]=1;
	ans.push_back(23*3600+59*60+59);
	
	for(int i=0;i<ans.size();i++){
		if(vis[ans[i]]!=1){
			hh=ans[i-1]/3600;
			mm=(ans[i-1]-hh*3600)/60;
			ss=ans[i-1]-hh*3600-mm*60;
			printf("%02d:%02d:%02d - ",hh,mm,ss);
			hh=ans[i]/3600;
			mm=(ans[i]-hh*3600)/60;
			ss=ans[i]-hh*3600-mm*60;
			printf("%02d:%02d:%02d",hh,mm,ss);
			cout<<endl;
		}
	}
	 

	return 0;
}







题目来源:蓝桥杯-第十四届模拟-第一期 充电器

题目描述:
在这里插入图片描述

题目思路:

题目代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long

int n;
int last = 0, p = 0;	// 上次时间戳与功率
int ans = 0;

// 时间字符串转化为秒作为时间戳
int toSecond(string s) {
    int h = (s[0] - '0' + 0) * 10 + (s[1] - '0' + 0);
    int m = (s[3] - '0' + 0) * 10 + (s[4] - '0' + 0);
    int second = (s[6] - '0' + 0) * 10 + (s[7] - '0' + 0);
    return second + m * 60 + h * 60 * 60;
}

signed main() {
    string s;
    int u, i;
    cin >> n;
    while (n--) {
        cin >> s >> u >> i;
        int second = toSecond(s);
        ans += p * (second - last);
        last = second;
        p = u * i;
    }
    cout << ans << endl;
    return 0;
}


题目来源:蓝桥杯-2022省赛模拟-时长计算

题目描述:
在这里插入图片描述

题目思路:

题目代码:

#include<stdio.h>
int main()
{
    int h0,m0,s0;
    int h,m,s;
    int h1,m1,s1;
    int sum;
    scanf("%d:%d:%d",&h0,&m0,&s0);
    scanf("%d:%d:%d",&h,&m,&s);
    sum=(h*3600+m*60+s)-    (h0*3600+m0*60+s0);
    h1=sum/3600;
    m1=sum/60%60;
    s1=sum%60%60;
        printf("%02d:%02d:%02d",h1,m1,s1);
    return 0;
}

题目来源:蓝桥杯-2018省赛-航班时间

题目描述:
在这里插入图片描述

题目思路:

题目代码:

#include<bits/stdc++.h>
using namespace std;

const int day = 24*60*60;    //全部转化为秒 
const int hour = 60*60;
const int minutes = 60;
 
int start() {      //出发时间 
    int a,b,c;
    scanf("%d:%d:%d",&a,&b,&c);
    int time = a*hour + b*minutes + c;
    return time;
}
 
int end() {   //到达时间 
    int a,b,c;
    scanf("%d:%d:%d",&a,&b,&c);
    int time = a*hour + b*minutes + c;
    char ch,extra_day;
    while( (ch = getchar())!='\n' && ch != '\r' ) {
        if(ch == '(') {
            getchar();  //除去"+" 
            extra_day = getchar();   //额外天数 
            time = time + (extra_day - '0')*day;
        }
    } 
    return time;
}
 
void display(int time) {    //显示时间 
    int a,b,c;
    a = time/hour;
    time = time % hour;
    b = time / minutes;
    time = time % minutes;
    c = time;
    printf("%02d:%02d:%02d\n",a,b,c);
}
 
int main() {
    int h1,m1,s1,h2,m2,s2;
    int t;
    scanf("%d",&t);
    while(t--) {
        int start1 = start();
        int end1 = end();
        int start2 = start();
        int end2 = end();
        int ans = 0;
        ans = (end1 - start1) + (end2 - start2);  //相加 
        display(ans/2);    //除2 
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值