当前位置:首页题目 > 正文

C++编程实现骑车和路时间快慢问题

作者::2023-03-03 19:12:10题目阅读 2164

编程:【问题描述】 在北大校园里,没有自行车,上课办事会很不方便.但实际上,并非去办任何事情都是骑车快,因为骑车总要找车、开锁、停车、锁车等,这要耽误一些时间.假设找到自行车,开锁并车上自行车的时间为27秒;停车锁车的时间为23秒;步行每秒行走1.2米,骑车每秒行走3.0米。请判断走不同的距离去办事,是骑车快还是走路快。 【输入】输入一行,包含一个整数,表示一次办事要行走的距离,单位为米。【输出】输出一行,如果骑车快,输出一行“Bike”;如果走路快,输出一行"Walk";如果一样快,输出一行"All"。 【样例输入】120 【样例输出】Bike

下面是C++代码实现:
#include <iostream>
using namespace std;

int main() {
    int distance;
    cin >> distance;

    // 计算步行和骑车的时间
    double walk_time = distance / 1.2;
    double bike_time = 27 + distance / 3.0 + 23;

    // 判断哪个时间更短
    if (walk_time < bike_time) {
        cout << "Walk" << endl;
    } else if (walk_time > bike_time) {
        cout << "Bike" << endl;
    } else {
        cout << "All" << endl;
    }

    return 0;
}


代码说明:

  1. 首先从标准输入中读取一次办事要行走的距离(单位为米)。

  2. 根据题目要求,计算出步行和骑车需要的时间,分别为 distance / 1.2 秒和 27 + distance / 3.0 + 23 秒。

  3. 对步行和骑车的时间进行比较,根据结果输出 Walk、Bike 或者 All。

  4. 最后将程序返回 0,表示程序正常结束。


如果时间相等 浮点数无法直接比较相等

当浮点数参与比较运算时,由于浮点数的存储方式和运算特性,可能会出现精度误差,因此不能直接用等号判断两个浮点数是否相等。

为了解决这个问题,可以定义一个非常小的误差范围,判断两个浮点数之间的差值是否小于这个误差范围,如果小于误差范围,则认为两个浮点数相等。

下面是一种比较常见的比较浮点数是否相等的方式,其中 EPSILON 定义了误差范围:

const double EPSILON = 1e-8;

if (fabs(a - b) < EPSILON) {
    // a 和 b 被认为相等
}

其中,fabs 函数是用来计算一个 double 类型的数的绝对值,1e-8 是一个非常小的数,表示 0.00000001,通常用来表示精度误差的范围。


第一个程序用if else语句判断大于和小于。在这个问题中,我们通过判断步行时间和骑车时间的大小关系,来决定输出 Walk、Bike 还是 All。

由于两个时间的计算结果都是浮点数,因此在判断是否相等时,我们可以避免直接使用 == 操作符来比较浮点数的值,而是使用 >< 操作符来比较两个浮点数的大小关系,从而避免了浮点数比较时的精度误差问题。

因此,我们不需要显式地比较两个浮点数是否相等,而是通过判断它们的大小关系来进行判断。这种方式虽然无法判断两个浮点数是否精确相等,但是对于这个问题来说,已经足够了。



野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击