AcWing 668. 游戏时间2
原题链接
简单
作者:
白眉
,
2025-01-08 00:08:38
,
所有人可见
,
阅读 2
使用绝对时间计算
- 第一次看到这个题解是有点震撼的,但是这种计算时间的题不就要这么写吗?
在数据范围许可的情况下,转换为最先单位
#include <cstdio>
int main()
{
int a,b,c,d; // 用于记录输入数据
int hours, mins; // 保存答案
scanf("%d%d%d%d", &a, &b, &c, &d);
b += a*60;
d += c*60;
mins = d - b;
if(mins<=0) // 不正常的时间
mins += 24*60; // 加上一天的时间
hours = mins / 60;
mins %= 60;
printf("O JOGO DUROU %d HORA(S) E %d MINUTO(S)", hours, mins);
return 0;
}
使用数组循环的方法
- 看到了相似的操作,我就想到了使用数组遍历来解决,但是在提交的时候确实发现有些数据是没办法满足的
这也算暴力解题的一种吧!
#include <cstdio>
int main()
{
int a[4];
int ans[2], data[]={24, 60};
for(int i =0;i<4;i++)
scanf("%d", &a[i]);
for(int i = 0;i<2;i++)
{
if(a[i]>a[i+2])
ans[i] = data[i] + a[i+2] - a[i];
else if(a[i] == a[i+2])
ans[i] = data[i];
else ans[i] = a[i+2] - a[i];
}
//以下三种情况没有考虑到,需要重新特判(在可以暴力的时候不建议这么写)
if(a[1]>a[3]) ans[0] --;
if(a[1]==a[3]) ans[1] = 0;
if(a[0]==a[2]&&a[1]<a[3]) ans[0] = 0;
printf("O JOGO DUROU %d HORA(S) E %d MINUTO(S)", ans[0], ans[1]);
return 0;
}
使用正常的暴力方法
// 没写