【PAT B1026】程序运行时间 (15分)

入门模拟-简单模拟

简单模拟介绍

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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值