「PAT乙级真题解析」Basic Level 1026 程序运行时间 (问题分析+完整步骤+伪代码描述+提交通过代码)
题目给定两个整数, 设定这两个数的差/CLK_TCK(此题中值为100)为程序时间运行的总秒数。 要求将花费的时间从总秒数转成"小时:分钟:秒数"的形式输出.
#算法#数据结构#需求分析#pat考试#c语言
Table of Contents
乙级的题目训练主要用来熟悉编程语言的语法和形成良好的编码习惯和编码规范。从小白开始逐步掌握用编程解决问题。
问题分析
题目给定两个整数, 设定这两个数的差/CLK_TCK(此题中值为100)为程序时间运行的总秒数。 要求将花费的时间从总秒数转成"小时:分钟:秒数"的形式输出.
如何求得小时数
小时数就是看总秒数可以转为成多少个小时余多少秒。 即 hour = total_second_amount / 3600
如何求得分钟数
同理, 分钟数为转化成小时之后余下的秒数可以转为的分钟数 即 minute = (total_second_amount % 3600) / 60
如何求得秒数
同理, 最终秒数就是转为分钟之后余下的秒数 即 second = (total_second_amount % 3600) % 60 事实上, 秒数就是不能转为成分数的秒数。 - 相当于逆向解题过程: - 总秒数可以转为多少分钟余多少秒 - 转换的分钟可以转为多少小时余多少分钟 second = total_second_amount % 60
完整秒数
- 获取 两个整数
- 求得总秒数: 两个整数之差除以CLK_TCK
- 小时数 = 总秒数除以3600后的商
- 分钟数 = 总秒数模3600的余数除以60的商
- 秒数 = 总秒数模60的余数
- 按照格式输出
伪代码描述
- get input start_time, end_time
- total_second_amount = (start_time - end_time) / CLK_TCK
- hour = total_second_amount / 3600
- minute = (total_second_amount % 3600) / 60
- second = total_second_amount % 60 */
完整提交代码
/*
# 问题分析
题目给定两个整数, 设定这两个数的差/CLK_TCK(此题中值为100)为程序时间运行的总秒数。
要求将花费的时间从总秒数转成"小时:分钟:秒数"的形式输出.
## 如何求得小时数
小时数就是看总秒数可以转为成多少个小时余多少秒。
即 hour = total_second_amount / 3600
## 如何求得分钟数
同理, 分钟数为转化成小时之后余下的秒数可以转为的分钟数
即 minute = (total_second_amount % 3600) / 60
## 如何求得秒数
同理, 最终秒数就是转为分钟之后余下的秒数
即 second = (total_second_amount % 3600) % 60
事实上, 秒数就是不能转为成分数的秒数。
- 相当于逆向解题过程:
- 总秒数可以转为多少分钟余多少秒
- 转换的分钟可以转为多少小时余多少分钟
second = total_second_amount % 60
# 完整秒数
1. 获取 两个整数
2. 求得总秒数: 两个整数之差除以CLK_TCK
3. 小时数 = 总秒数除以3600后的商
4. 分钟数 = 总秒数模3600的余数除以60的商
5. 秒数 = 总秒数模60的余数
6. 按照格式输出
# 伪代码描述
1. get input start_time, end_time
2. total_second_amount = (start_time - end_time) / CLK_TCK
3. hour = total_second_amount / 3600
4. minute = (total_second_amount % 3600) / 60
5. second = total_second_amount % 60
*/
# include<stdio.h>
# define CLK_TCK 100
int main(){
int start_time, end_time;
scanf("%d %d", &start_time, &end_time);
double time_delta = (double)(end_time - start_time) / CLK_TCK;
int total_second_amount = (int)((time_delta * 1 + 0.5) / 1);
int hour = total_second_amount / 3600;
int minute = (total_second_amount % 3600) / 60;
int second = (total_second_amount % 3600) % 60;
printf("%02d:%02d:%02d", hour, minute, second);
return 0;
}