游戏时间c++

(学习自用)

一、题目

读取四个整数 A,B,C,D用来表示游戏的开始时间和结束时间。

其中 A 和 B 为开始时刻的小时和分钟数,C 和 D 为结束时刻的小时和分钟数。

请你计算游戏的持续时间。

比赛最短持续 1 分钟,最长持续 24小时。

输入格式

共一行,包含四个整数 A,B,C,D

输出格式

输出格式为 O JOGO DUROU X HORA(S) E Y MINUTO(S),表示游戏共持续了 X小时 Y 分钟。

输入样例1:
7 8 9 10
输出样例1:
O JOGO DUROU 2 HORA(S) E 2 MINUTO(S)
输入样例2:
7 7 7 7
输出样例2:
O JOGO DUROU 24 HORA(S) E 0 MINUTO(S)
输入样例3:
7 10 8 9
输出样例3:
O JOGO DUROU 0 HORA(S) E 59 MINUTO(S)

 法一:

一项一项列举

1.当结束时间的小时(c)小于开始时间小时(a)时

24-a+c

2.当结束时间的分钟(d)小于开始时间分钟(b)时

60-d-b同时要给小时位-1,因为这里的60分钟是借来的

#include <iostream>
using namespace std;
int main() {
    int a,b,c,d;
    cin>>a>>b>>c>>d;
    if (a<c&&b<=d) cout<<"O JOGO DUROU "<<c-a<<" HORA(S) E "<<d-b<<" MINUTO(S)";
    if (a<c&&b>d) cout<<"O JOGO DUROU "<<c-a-1<<" HORA(S) E "<<d+60-b<<" MINUTO(S)";
    if (a>c&&b<d) cout<<"O JOGO DUROU "<<24-a+c<<" HORA(S) E "<<d-b<<" MINUTO(S)";
    if (a>c&&b>d) cout<<"O JOGO DUROU "<<c+24-a-1<<" HORA(S) E "<<60-b+d<<" MINUTO(S)";
    if (a==c&&b<d) cout<<"O JOGO DUROU "<<a-c<<" HORA(S) E "<<d-b<<" MINUTO(S)";
    if (a==c&&b>d) cout<<"O JOGO DUROU "<<a-c+24-1<<" HORA(S) E "<<d+60-b<<" MINUTO(S)";
    if (a==c&&b==d) cout<<"O JOGO DUROU "<<a-c+24<<" HORA(S) E "<<b-d<<" MINUTO(S)";
    return 0;
}

法二:

#include <iostream>

using namespace std;

int main()
{
    int a, b, c, d;
    cin >> a >> b >> c >> d;

    if(d < b)  //注意判断分钟要放在判断小时前
    {          //例如 7 11 7 10,这里先判断分钟d<b所以c—1=6,这时在去判断小时,这时c<a就加24
      c -= 1;
      d += 60; 
    }
    if(c < a) c += 24; 

    if(c - a == 0 && d - b == 0) c += 24; // 特判,这种情况表示过了一天

    printf("O JOGO DUROU %d HORA(S) E %d MINUTO(S)",c-a,d-b);
}

法三:

直接换成分钟计算,计算完在换回

#include <iostream>

using namespace std;

int main()
{
    int a, b, c, d, minute1, minute2;

    cin >> a >> b >> c >> d;
    minute1 = a * 60 + b;
    minute2 = c * 60 + d;

    int hour = 0, minute = 0;
    int dec = minute2 - minute1;

    if(dec == 0)
    {
        hour = 24;
        minute = 0;
    }
    else
    {
        if(dec < 0)       //如 22:00 到 5:00 
        {      
            dec += 24 * 60; //dec计算的是5点到22点的时间,共17小时。故应用一天的分钟(24*60)减去,才是正确经历的分钟
        }
        hour = dec / 60;
        minute = dec % 60;
    }
    cout << "O JOGO DUROU " << hour << " HORA(S) E " << minute << " MINUTO(S)";
    return 0;
}

法二、三来自acwing 668题解

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值