• noip模拟赛:电话时间[字符串]


    【问题描述】

    某人总是花很多时间给父母打电话。有一次他记录了打电话的开始时间和结束时刻t1t2,请你帮他算算此次通话一共用了多少秒。又有一次,他记录了打电话的开始时刻t1和通话的时间长度len,请你帮他计算他在什么时刻结束通话。

    已知每次通话时间小于24个小时

     

    【输入文件】

    输入文件phone.in的第一行为一个正整数T,表示了数据组数。 

    接下来T行,每行第一个数为k

    如果k = 0,接下来包含两个时间t1t2,表示了打电话的开始时间和结束时刻,用一个空格隔开,时间格式为HH:MM:SS,其中0HH23,0MM,SS59HHMMSS都是两位数字,因此0:1:2是不合法的时间(应写作00:01:02)。你应该对这个询问输出通话时间长度,答案一定为区间[0,86400)之内的非负整数

    如果k=1,接下来包含一个时间t1和一个非负整数len,表示了打电话的开始时刻与通话时间长度,用一个空格隔开,时间格式同为HH:MM:SS,同样时间小于24个小时,即len<86400。你应该对这个询问输出结束通话的时刻,同为HH:MM:SS格式。

     

    【输出文件】

    输出文件phone.out包含T个整数或者时间,对于每个询问输出对应的答案。

     

    【样例输入】

    4

    0 01:02:03 04:05:06

    0 23:59:59 00:00:00

    1 00:00:03 3

    1 23:59:58 4

     

    【样例输出】

    10983

    1

    00:00:06

    00:00:02

     

    【数据规模与约定】

    对于20%的数据, 10

    对于40%的数据, 100

    对于100%的数据, 100000

     

    水题~注意一下如果到了第二天的情况即可。

    代码:

     

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <iostream>
    using namespace std;
    int n;
    int k,len,ans1,ans2,ans3,ans,temp1,temp2;
    char c;
    string s[3];
    int a[10];
    
    void into(int x){
        memset(a,0,sizeof(a));
    	for(int i=0;i<8;i++){
    	   a[i]=s[x][i]-'0';
    	}	
    }
    
    int solve(int x){
    	into(x);
    	ans1=(a[0]*10+a[1])*3600;
    	ans2=(a[3]*10+a[4])*60;
    	ans3=(a[6]*10+a[7]);
    	ans=ans1+ans2+ans3;
    	return ans;
    }
    
    int main(){
    	freopen("phone.in","r",stdin);
    	freopen("phone.out","w",stdout);
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++){
    		scanf("%d",&k);
    		if(k==0){
    			cin>>s[1]>>s[2];
                temp1=solve(1);
                temp2=solve(2);
                if(temp2<temp1){
                	temp2+=86400;
                }
                cout<<temp2-temp1<<"
    ";
    		}
    		else{
    			cin>>s[1]>>len;
    			temp1=solve(1);
    			temp2=temp1+len;
    			if(temp2>=86400) temp2-=86400;
    			ans1=temp2/3600;
    			temp2%=3600;
    			ans2=temp2/60;
    			ans3=temp2%60;
    			if(ans1<10) printf("0%d:",ans1);
    			else printf("%d:",ans1);
    			if(ans2<10) printf("0%d:",ans2);
    			else printf("%d:",ans2);
    			if(ans3<10) printf("0%d
    ",ans3);
    			else printf("%d
    ",ans3);
    		}
    	}
    	return 0;
    }
    

     

      

     

  • 相关阅读:
    XML相关知识点
    MLPlatform开发日志
    1.0 es6 箭头函数
    基本数学概念
    4.4 thymeleaf使用补充
    vim操作手册
    eclise创建后台项目
    正则表达式
    数据库隔离级别
    1. gradle的使用教程
  • 原文地址:https://www.cnblogs.com/polebug/p/4075386.html
Copyright © 2020-2023  润新知