注册 登录
编程论坛 C++教室

求一个时间统计算法题的解法c++(新手上路)

莫启飞 发布于 2021-10-17 00:29, 3432 次点击
期望结果:希望能吧代码写出来,能加上注释就最好了,谢谢
题目来源杭电oj2021
Problem Description
某个实验需要统计时间,记录了实验开始和结束的时间,计算实验所用的时间。
Input
第一行输入一个整数n,表示样例个数,0<n<1000。接下来每组样例两行,表示开始时间和结束时间,格式为x天HH时MM分SS秒,x是一个整数表示第几天,0<x<20000,保证时间合法,结束时间比开始时间晚。
Output
每组数据输出经过的时间。
Sample Input
1
01天03小时26分12秒
01天04小时26分12秒
Sample Output
00天01小时00分00秒[/quote]
5 回复
#2
rjsp2021-10-17 12:30
20000*24*60*60 = 1728000000
ln(1728000000)/ln(2) = 30.69
因此,使用有效位32bits的整型即可

程序代码:
#include <iostream>
using namespace std;

int main( void )
{
    unsigned n;
    cin >> n;
   
    while( n-- )
    {
        unsigned d1, h1, m1, s1;
        scanf( "%u天%u小时%u分%u秒", &d1,&h1,&m1,&s1 );

        unsigned d2, h2, m2, s2;
        scanf( "%u天%u小时%u分%u秒", &d2,&h2,&m2,&s2 );
        
        unsigned delta = d2*(24*60*60) + h2*(60*60) + m2*60 + s2
                       - d1*(24*60*60) - h1*(60*60) - m1*60 - s1;
        unsigned d = delta / (24*60*60);
        unsigned h = delta / (60*60) % 24;
        unsigned m = delta / 60 % 60;
        unsigned s = delta % 60;
        printf( "%02u天%02u小时%02u分%02u秒\n", d,h,m,s );
    }
}

#3
莫启飞2021-10-17 16:37
回复 2楼 rjsp
谢谢您了
#4
莫启飞2021-10-18 21:19
回复 2楼 rjsp

你好能帮我看一下这几个问题吗在注释后面
程序代码:
#include <iostream>
using namespace std;

int main( void )
{
    unsigned n;
    cin >> n;
   
    while( n-- )
    {
        unsigned d1, h1, m1, s1;
        scanf( "%u天%u小时%u分%u秒", &d1,&h1,&m1,&s1 );

        unsigned d2, h2, m2, s2;
        scanf( "%u天%u小时%u分%u秒", &d2,&h2,&m2,&s2 );
        
        unsigned delta = d2*(24*60*60) + h2*(60*60) + m2*60 + s2//您这里是先把两个时间统一转换成秒,然后根据相差秒数分别求相差天数,小时数,分钟数和秒数吗
                       - d1*(24*60*60) - h1*(60*60) - m1*60 - s1;
        unsigned d = delta / (24*60*60);//然后天数为怎么这样算呀
        unsigned h = delta / (60*60) % 24;//下面的小时和分和秒为怎么要这样算呀
        unsigned m = delta / 60 % 60;
        unsigned s = delta % 60;
        printf( "%02u天%02u小时%02u分%02u秒\n", d,h,m,s );
    }
}
#5
rjsp2021-10-19 10:30
//您这里是先把两个时间统一转换成秒,然后根据相差秒数分别求相差天数,小时数,分钟数和秒数吗
是的

unsigned d = delta / (24*60*60);//然后天数为怎么这样算呀
一天有(24*60*60)秒,把总秒数除以(24*60*60),那不就得到天数嘛!你这个问得有点儿奇怪呀

unsigned h = delta / (60*60) % 24;//下面的小时和分和秒为怎么要这样算呀
一小时有(60*60)秒,那 delta/(60*60) 就得到了总“小时”数;
一天有 24小时,那“总小时数”除以24所得的余数 就是 “总小时数 不能凑成一整天的 剩余”呀。
举个例子,把 123小时 换算成 天数,那就是
    123 / 24 = 5(天数)
    123 % 24 = 3(小时数)
123除以24,商5余3,所以 123小时 可换算成 5天3小时
#6
莫启飞2021-10-19 11:38
回复 5楼 rjsp
嗯嗯明白了,谢谢您了
1