[华为机试真题][2014]64.实现两个合法时间相加

题目

描述:

给定两个合法的时间(格式固定:hh:mm:ss,时间合法,不用考虑其它情况),输入两个时间相加后的结果;注意,相加后的结果也必需是一个合法的时间;
附合法时间定义:小时在[00-23]之间,分钟和秒分别是在[00-59]之间;

运行时间限制:

无限制

内存限制:

无限制

输入:

时分秒格式的时间字符串,如00:00:00

输出:

时分秒格式的时间字符串,如00:00:00

样例输入:

00:00:00 00:00:01

样例输出:

00:00:01

答案提示: 建议将时间转换为秒数计算

代码

/*---------------------------------------
*   日期:2015-07-06
*   作者:SJF0115
*   题目:实现两个合法时间相加
*   来源:华为机试真题
-----------------------------------------*/
#include <iostream>
#include <string>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;

// 整型转换为string
string Int2Str(int num){
    string str = "";
    if(num == 0){
        str = "0";
        return str;
    }//if
    while(num){
        str.insert(str.begin(),num % 10 + ‘0‘);
        num /= 10;
    }//while
    return str;
}

// 两个合法时间相加
string TimeAdd(string t1,string t2){
    int h1 = atoi(t1.substr(0,2).c_str());
    int h2 = atoi(t2.substr(0,2).c_str());
    int m1 = atoi(t1.substr(3,2).c_str());
    int m2 = atoi(t2.substr(3,2).c_str());
    int s1 = atoi(t1.substr(6,2).c_str());
    int s2 = atoi(t2.substr(6,2).c_str());

    int s = (s1 + s2) % 60;
    int m = (m1 + m2 + (s1 + s2) / 60) % 60;
    int h = (h1 + h2 + (m1 + m2) / 60) % 24;

    string str = "";
    if(h < 10){
        str += "0";
    }//if
    str += Int2Str(h) + ":";
    if(m < 10){
        str += "0";
    }//if
    str += Int2Str(m) + ":";
    if(s < 10){
        str += "0";
    }//if
    str += Int2Str(s);
    return str;
}

// 方法2
string TimeAdd2(string t1,string t2){
    int h1 = atoi(t1.substr(0,2).c_str());
    int h2 = atoi(t2.substr(0,2).c_str());
    int m1 = atoi(t1.substr(3,2).c_str());
    int m2 = atoi(t2.substr(3,2).c_str());
    int s1 = atoi(t1.substr(6,2).c_str());
    int s2 = atoi(t2.substr(6,2).c_str());

    int total = h1 * 60 * 60 + m1 * 60 + s1 + h2 * 60 * 60 + m2 * 60 + s2;

    int s = total % 60;
    int m = total / 60 % 60;
    int h = total / 60 / 60 % 24;

    string str = "";
    if(h < 10){
        str += "0";
    }//if
    str += Int2Str(h) + ":";
    if(m < 10){
        str += "0";
    }//if
    str += Int2Str(m) + ":";
    if(s < 10){
        str += "0";
    }//if
    str += Int2Str(s);
    return str;
}

int main(){
    string t1,t2;
    //freopen("C:\\Users\\Administrator\\Desktop\\acm.in","r",stdin);
    while(cin>>t1>>t2){
        cout<<TimeAdd(t1,t2)<<" "<<TimeAdd2(t1,t2)<<endl;
    }//while
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-23 21:59:32

[华为机试真题][2014]64.实现两个合法时间相加的相关文章

[华为机试真题][2014]63.等式变换

题目 输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立. 1 2 3 4 5 6 7 8 9 = X 比如: 12-34+5-67+89 = 5 1+23+4-5+6-7-8-9 = 5 请编写程序,统计满足输入整数的所有整数个数. 输入: 正整数,等式右边的数字 输出: 使该等式成立的个数 样例输入:5 样例输出:21 代码 /*--------------------------------------- * 日期:2015-07-06 * 作者:SJF0115 *

[华为机试真题]66.单词搜索

题目 代码 /*--------------------------------------- * 日期:2015-07-06 * 作者:SJF0115 * 题目:WordSearch * 来源:华为机试真题 -----------------------------------------*/ #include <iostream> #include <string> #include <vector> #include <stack> #include

[华为机试真题][2015]65.和尚挑水

题目 某寺庙里7个和尚:轮流挑水,为了和其他任务不能冲突,各人将有空天数列出如下表: 和尚1: 星期二,四; 和尚2: 星期一,六; 和尚3: 星期三,日; 和尚4: 星期五; 和尚5: 星期一,四,六; 和尚6: 星期二,五; 和尚7: 星期三,六,日; 请将所有合理的挑水时间安排表 思路 回朔法求解 回朔法即每进行一步,都试图在当前部分解的基础上扩大该部分解.扩大时,首先检查扩大后是否违反了约束条件,若不违反,则扩大之,然后继续在此基础上按照类似的方法进行,直至成为完整解:若违反,则放弃该步

[华为机试真题]70.分苹果

题目 M个相同苹果放到N个相同篮子里有多少种放法,允许有篮子不放. 1<=M<=10,1<=N<=10 例如5个苹果三个篮子,3,1,1 和 1,1,3是同一种放法 输入 7 3 输出 8 思路 设f(m,n) 为m个苹果,n个盘子的放法数目: 当n>m:必定有n-m个盘子永远空着,去掉它们对摆放苹果方法数目不产生影响.即if(n>m) f(m,n) = f(m,m) 当n<=m:不同的放法可以分成两类: (1)有至少一个盘子空着,即相当于f(m,n) = f(m

[华为机试真题]69.姓名的夫妻相

题目 在中国,形容夫妻恩爱的词汇中,大家用的比较多的就是"夫妻相".所谓"夫妻相",就是两个人看上去比较般配,长相.身材等某些方面有一定的相似度. 本题则另辟蹊径,从人的姓名维度,以字母重复个数来寻找最具"夫妻相"的人. 题目中预先给定一组女士的姓名拼音.输入男士的姓名拼音(拼音中间可以有空格,字母全部小写),依预先给定姓名拼音的先后遍历所有姓名,输出字母重复数最多的女士姓名. 规则1:如果字母重复数最多的女士有多位相同,则以最先匹配的女士做为最

刷题3——实现输入两个合法时间相加

描述:    给定两个合法的时间(格式固定:hh:mm:ss,时间合法,不用考虑其它情况),输入两个时间相加后的结果:注意,相加后的结果也必需是一个合法的时间:附合法时间定义:小时在[00-23]之间,分钟和秒分别是在[00-59]之间:运行时间限制:    无限制内存限制:    无限制输入:    时分秒格式的时间字符串,如00:00:00输出:    时分秒格式的时间字符串,如00:00:00 样例输入:    00:00:00 00:00:01样例输出:    00:00:01答案提示:

2005年华中科技大学计算机保研机试真题 找位置

题目1199: 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <vector> 5 using namespace std; 6 struct node{ 7 vector<int> v; 8 }; 9 node map['z'+1]; 10 int main(){ 11 string s; 12 while(cin>>s){ 13

考研机试真题(一)之排序

转载请标明出处:牟尼的专栏 http://blog.csdn.net/u012027907 题目1202:排序 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:10071 解决:3549 题目描述: 对输入的n个数进行排序并输出. 输入: 输入的第一行包括一个整数n(1<=n<=100). 接下来的一行包括n个整数. 输出: 可能有多组测试数据,对于每组数据,将排序后的n个整数输出,每个数后面都有一个空格. 每组测试数据的结果占一行. 样例输入: 4 1 4 3 2 样例输出: 1

机试真题 小朋友报数问题——约瑟夫环

没啥难度,还是难以判断测试用例的问题,也就是k是否大于10,否则就会采用字符串进行判断: #include<iostream> #include<vector> #include<queue> #include<string> using namespace std; int n, k; struct node { int index = -1; int num = -1; }; queue<node>que; vector<node>