关电脑-牛客网-福建工程学院第七届ACM程序设计新生赛A题

关电脑

来源:牛客网 链接:https://ac.nowcoder.com/acm/contest/289/A

题目

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld

题目描述

Windows系统提供了一个命令,这个命令的功能是让电脑按时自动关机。但这个命令需要的参数并不是期望关机的时间,而是“当前时间与期望关机的时间两者间的秒数差”。为了使用这个命令,我们需要计算当前时间和期望关闭电脑的时间的时间差。现在就请你设计一个程序来帮忙计算这个差值。

本题中所给时间均为24小时制。期望关机时间一定在当前时间之后。如果当前时间与期望关机时间不在同一天(即字面上后者比前者时间早),那么认为期望关闭电脑的时间在当前时间的后一天。

输入描述:

输入数据的第一行为一个正整数T,表示接下来有T组测试数据。

每组测试数据仅有一行,该行包含六个以空格分隔的整数。前三个整数h1、m1、s1表示当前时间的时、分、秒;后三个整数h2、m2、s2表示期望关机时间的时、分、秒。

对于输入的数据,约定:0≤h1,h2≤23;0≤m1,m2,s1,s2≤59。

输出描述:

对于每组测试数据,请输出“Case #x: y”(不含引号)。其中x为从1开始的组数序号,y为两时间相差秒数。

示例1
输入

2
1 0 0 2 0 0
0 0 0 0 0 0

输出

Case #1: 3600
Case #2: 86400

思路解析

方法一、爆破

一开始看到这个题目的时候,感觉不是很难,两个时间(小时,分钟,秒钟),可以爆破出来,一个是从前往后,通过判断小时,三种情况:>、=、<。一共是32种情况。还有一种就是从后往前,不断判断,理论上都能做出来。
不过我是只菜狗,没爆破出来,就换了种思路。

方法二、统一单位

题目中一共三种单位:时、分、秒。其中的进制不同。1h=24m;1m=60s。这就导致解题时容易混乱不清,且较为麻烦。
题目中最后返回输出的单位是秒,所以在代码开头,我们就可以将两个时间都换算成以秒为单位的数值,这样判断起来只需要判断一次就足够了。

Java源代码示例

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
//		https://ac.nowcoder.com/acm/contest/289/A
		Scanner in = new Scanner (System.in);
		int n = in.nextInt();
		for(int i=1; i<=n; i++) {
			int h1 = in.nextInt();int m1 = in.nextInt();int s1 = in.nextInt();	//第一个时间的小时、分钟、秒钟
			int h2 = in.nextInt();int m2 = in.nextInt();int s2 = in.nextInt();	//第二个时间的小时、分钟、秒钟
			int a1,a2;
			a1 = h1*3600+m1*60+s1;	//换算成秒
			a2 = h2*3600+m2*60+s2;
			if(a2>a1) {		//如果在同一天内
				System.out.println("Case #"+i+": "+(a2-a1));
			}
			else {		//不在同一天内,加上24小时,即86400秒
				System.out.println("Case #"+i+": "+(a2+86400-a1));	
			}
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值