标题:求一个时间统计算法题的解法c++(新手上路)
只看楼主
莫启飞
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2021-10-13
结帖率:100%
已结贴  问题点数:18 回复次数:5 
求一个时间统计算法题的解法c++(新手上路)
期望结果:希望能吧代码写出来,能加上注释就最好了,谢谢
题目来源杭电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]
搜索更多相关主题的帖子: 时间 结束 统计 实验 表示 
2021-10-17 00:29
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:18 
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 );
    }
}

2021-10-17 12:30
莫启飞
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2021-10-13
得分:0 
回复 2楼 rjsp
谢谢您了
2021-10-17 16:37
莫启飞
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2021-10-13
得分:0 
回复 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 );
    }
}
2021-10-18 21:19
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
//您这里是先把两个时间统一转换成秒,然后根据相差秒数分别求相差天数,小时数,分钟数和秒数吗
是的

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小时
2021-10-19 10:30
莫启飞
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2021-10-13
得分:0 
回复 5楼 rjsp
嗯嗯明白了,谢谢您了
2021-10-19 11:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-507187-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.325316 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved