PTA 程序运行时间(java)

本文介绍了一种使用C语言的clock()函数和CLK_TCK常数来测量程序运行时间的方法,通过计算两次调用clock()函数之间的时钟打点数差值并转换为秒,实现了对函数运行时间的精确测量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1026 程序运行时间 (15分)

要获得一个 C 语言程序的运行时间,常用的方法是调用头文件 time.h,其中提供了 clock() 函数,可以捕捉从程序开始运行到 clock() 被调用时所耗费的时间。这个时间单位是 clock tick,即“时钟打点”。同时还有一个常数 CLK_TCK,给出了机器时钟每秒所走的时钟打点数。于是为了获得一个函数 f 的运行时间,我们只要在调用 f 之前先调用 clock(),获得一个时钟打点数 C1;在 f 执行完成后再调用 clock(),获得另一个时钟打点数 C2;两次获得的时钟打点数之差 (C2-C1) 就是 f 运行所消耗的时钟打点数,再除以常数 CLK_TCK,就得到了以秒为单位的运行时间。
这里不妨简单假设常数 CLK_TCK 为 100。现给定被测函数前后两次获得的时钟打点数,请你给出被测函数运行的时间。

输入格式:

输入在一行中顺序给出 2 个整数 C1 和 C2。注意两次获得的时钟打点数肯定不相同,即 C1 < C2,并且取值在 [0,10​7​​]。

输出格式:

在一行中输出被测函数运行的时间。运行时间必须按照 hh:mm:ss(即2位的 时:分:秒)格式输出;不足 1 秒的时间四舍五入到秒。

输入样例:

123 4577973

输出样例:

12:42:59

样例解答:

import java.util.Scanner;

public class Main {
 public static void main(String[] args)  {
  Scanner sc = new Scanner(System.in);
  int c1 = sc.nextInt();
  int c2 = sc.nextInt();
  int t = (int) Math.round((c2-c1) * 1.0 / 100);
  int h = t/3600;
  int m = (t%3600)/60;
  int s = t%60;
  System.out.printf("%02d:%02d:%02d",h,m,s);
  
 }
}
### PTA阅览室 Java 实现 以下是基于PTA阅览室问题的Java实现代码。该代码实现了记录读者借书和还书的时间,并计算当天的借书次数以及平均阅读时间。 #### 代码实现 ```java import java.util.Scanner; public class Library { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { int n = scanner.nextInt(); // 测试用例数量 if (n == 0) break; int[] startTime = new int[1001]; boolean[] isStarted = new boolean[1001]; int count = 0, totalTime = 0; for (int i = 0; i < n; i++) { int bookId = scanner.nextInt(); if (bookId == 0) { System.out.println(count + " " + (count == 0 ? 0 : Math.round((double)totalTime / count))); continue; } char action = scanner.next().charAt(0); String timeStr = scanner.next(); int hour = Integer.parseInt(timeStr.substring(0, 2)); int minute = Integer.parseInt(timeStr.substring(3, 5)); int currentTime = hour * 60 + minute; if (action == 'S') { startTime[bookId] = currentTime; isStarted[bookId] = true; } else if (action == 'E' && isStarted[bookId]) { totalTime += currentTime - startTime[bookId]; count++; isStarted[bookId] = false; } } } scanner.close(); } } ``` #### 功能说明 上述代码的功能如下: - 使用`Scanner`类读取输入数据。 - 定义数组`startTime`用于存储每本书的起始借阅时间,定义布尔型数组`isStarted`标记书籍是否已被借出[^1]。 - 对于每次操作(借书'S'或还书'E'),分别处理时间和状态更新逻辑。 - 当遇到书号为`0`的操作时,输出当前测试用例中的借书次数和平均阅读时间[^3]。 #### 示例运行 假设输入如下: ``` 3 1 S 08:10 2 S 08:35 1 E 10:00 2 E 13:16 0 S 17:00 0 S 17:00 3 E 08:10 1 S 08:20 2 S 09:00 1 E 09:20 0 E 17:00 ``` 程序会依次解析每一组数据并输出结果: ``` 2 196 0 0 1 60 ``` #### 注意事项 - 时间转换采用小时乘以60加上分钟的方式统一成总分钟数进行运算[^4]。 - 平均阅读时间为整数值,需四舍五入处理。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值