入门模拟-简单模拟
简单模拟介绍
PAT乙级中入门模拟题,入门模拟题又分为简单模拟,查找元素,图形输出,
日期处理,进制转换,字符串处理等等!
何为模拟题?
模拟题是一类“题目怎么说,你就怎么做的”的题目,如果实现不太麻烦可以称之为就“简单模拟”,此类题目不涉及算法,完全根据题目描述进行代码的编写,主要考察代码能力
虽听起来可能蛮简单的,但绝不是1 + 1 = 2的题目!!!
有些题实现起来还是有小小难度!
本题来自PAT乙级题库 B1026 程序运行时间(简单模拟)
题目链接:1026 程序运行时间 (15分)
输入格式:
输入在一行中顺序给出 2 个整数 C1 和 C2。注意两次获得的时钟打点数肯定不相同,即 C1 < C2,并且取值在 [0,10^7]
输出格式:
在一行中输出被测函数运行的时间。运行时间必须按照 hh:mm:ss(即2位的 时:分:秒)格式输出;不足 1 秒的时间四舍五入到秒。
输入样例:
123 4577973
输出样例:
12:42:59
当然实现起来固然简单,但是提交后会出现无法通过所有测试点
问题主要存在以下方面
1,题目要求
运行时间必须按照 hh:mm:ss(即2位的 时:分:秒)格式输出
即当我们的hh,mm.ss是1位数字时需要补上0
请问你补上啦吗?
2,不足 1 秒的时间四舍五入到秒。
不足1秒的四舍五入,你是否是int ss = int(time),且time是double 类型,
那么这不是四舍五入而是抹去小数点后的尾数,与四舍五入不一样
不足1秒四舍五入,即最后计算的描述如果有小数点都必须进行四舍五入
需要用到 math.h头文件里的round函数
不足1秒不要理解为秒数 < 1秒
C++语言实现
#include <iostream>
#include <cmath>
using namespace std;
//本题主要考察时分秒的换算
const int CLK_TCK = 100;
int main()
{
int c1, c2;
cin >> c1 >> c2;
double time = 1.0 * (c2 - c1) / CLK_TCK ;
int hh = 0, mm = 0, ss = 0;
hh = int(time) / 3600;//求小时数,先把小数点后的尾数抹去
mm = (int(time) % 3600 ) / 60 ;//同hh
double s = (time - hh * 3600 - mm * 60);//求出剩下的秒数
ss = round(s);//可能包含小数,那么四舍五入
//按要求必须有两位数,一位需要补0
if (hh < 10) cout << "0" << hh << ":";
else cout << hh << ":";
if (mm < 10) cout << "0" << mm << ":";
else cout << mm << ":";
if (ss < 10) cout << "0" << ss ;
else cout << ss ;
return 0;
}
C语言实现
简单一些,但是要理解如何实现进行四舍五入的
#include <cstdio>
int main()
{
int c1, c2;
scanf("%d %d", &c1, &c2);
int ans = c2 - c1;
//我们知道ans需要除以CLK_TCK才表示秒数,本题中CLK_TCK = 100
if (ans % 100 >= 50) //表示四舍五入
{//当ans的末尾两位数,即ans/100后的表示总秒数的小数后两位,如果后两位大于或等于50,即需要五入
ans = ans / 100 + 1;
}
else
ans = ans / 100;
printf("%02d:%02d%02d\n", ans / 3600, ans % 3600 /60, ans % 60);
return 0;
}