7-8 龟兔赛跑

 

分数 20

全屏浏览题目

切换布局

作者 陈建海

单位 浙江大学

乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快?

输入格式:

输入在一行中给出比赛时间T(分钟)。

输出格式:

在一行中输出比赛的结果:乌龟赢输出@_@,兔子赢输出^_^,平局则输出-_-;后跟1空格,再输出胜利者跑完的距离。

输入样例:

242

输出样例:

@_@ 726

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

我的答案:

首先,我们需要根据题目描述模拟兔子和乌龟的赛跑过程。考虑到每10分钟兔子都会检查一下与乌龟的距离,我们可以将比赛时间分解为10分钟的小段进行处理。

以下是实现:

C语言实现:

#include <stdio.h>

int main() {
    int T;
    scanf("%d", &T);

    int tortoise = 0, hare = 0; // 乌龟和兔子的距离
    while (T > 0) {
        // 兔子跑10分钟或剩余时间
        int runTime = T >= 10 ? 10 : T;
        hare += runTime * 9;
        tortoise += runTime * 3;
        T -= runTime;

        if (hare <= tortoise && T > 0) {
            hare += T >= 10 ? 10 * 9 : T * 9;
            tortoise += T >= 10 ? 10 * 3 : T * 3;
            T -= T >= 10 ? 10 : T;
        } else if (T > 0) {
            T -= 30; // 兔子休息
        }
    }

    if (hare > tortoise) {
        printf("^_^ %d\n", hare);
    } else if (hare < tortoise) {
        printf("@_@ %d\n", tortoise);
    } else {
        printf("-_- %d\n", hare);
    }

    return 0;
}

C++:

#include <iostream>
using namespace std;

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

    int tortoise = 0, hare = 0; // 乌龟和兔子的距离
    while (T > 0) {
        // 兔子跑10分钟或剩余时间
        int runTime = T >= 10 ? 10 : T;
        hare += runTime * 9;
        tortoise += runTime * 3;
        T -= runTime;

        if (hare <= tortoise && T > 0) {
            hare += T >= 10 ? 10 * 9 : T * 9;
            tortoise += T >= 10 ? 10 * 3 : T * 3;
            T -= T >= 10 ? 10 : T;
        } else if (T > 0) {
            T -= 30; // 兔子休息
        }
    }

    if (hare > tortoise) {
        cout << "^_^ " << hare << endl;
    } else if (hare < tortoise) {
        cout << "@_@ " << tortoise << endl;
    } else {
        cout << "-_- " << hare << endl;
    }

    return 0;
}

总结:

学到了什么?

三元运算符

这是一个使用条件(三元)运算符的语句。条件运算符 `? :` 是C和C++中的一个三元运算符,它允许您基于一个条件来选择两个值中的一个。其语法是:

condition ? value_if_true : value_if_false

现在,我们来详细解释给定的语句:

int runTime = T >= 10 ? 10 : T;

1. `T >= 10`:这是一个条件判断,检查变量 `T` 是否大于或等于10。

2. `10`:如果上述条件为真(即 `T` 的值大于或等于10),那么表达式的结果就是这个值。

3. `T`:如果上述条件为假(即 `T` 的值小于10),那么表达式的结果就是 `T` 的当前值。

4. `int runTime`:声明一个整数变量 `runTime` 并初始化它。其初始值取决于 `? :` 表达式的结果。

所以,这整个语句的意思是:如果 `T` 大于或等于10,那么 `runTime` 的值为10;否则,`runTime` 的值为 `T`。

例如:
- 如果 `T` 的值是15,那么 `runTime` 将被赋值为10。
- 如果 `T` 的值是5,那么 `runTime` 将被赋值为5。

总结:

这道“龟兔赛跑”题目不仅让我们回想起了经典的寓言故事,也为我们带来了几个编程和算法方面的学习点:

1. **模拟与迭代**:题目基于实际情景设置了一系列规则,我们需要按照这些规则逐步模拟乌龟和兔子的赛跑过程。在许多编程问题中,模拟和迭代是一种常用的方法,尤其在涉及时间和事件驱动的场景中。

2. **条件判断的重要性**:在龟兔赛跑的模拟中,我们经常需要基于当前的赛跑状态(例如,兔子是否领先)来做出决策。使用条件语句(如 `if-else`)可以帮助我们根据不同的条件采取不同的行动。

3. **三元运算符的使用**:如您之前所询问的,题目中使用了条件(三元)运算符。这是一个简洁的方式,可以在一行中进行条件判断并返回一个值。

4. **数学模型的简化**:尽管我们可以通过完全模拟整个赛跑过程来解决问题,但在某些情况下,直接使用数学模型或算法可以简化问题并减少计算量。例如,我们可以通过数学计算直接确定乌龟和兔子在某个时间点的位置,而不是模拟他们每分钟的运动。

5. **编程细节和边界条件的处理**:注意兔子每10分钟检查一次,然后可能休息30分钟,这都可能影响赛跑的结果。处理这些细节和边界条件是确保程序正确性的关键。

6. **思维训练**:问题鼓励我们不仅仅思考如何编写代码来解决问题,还要考虑如何在给定的规则和条件下制定策略。这对于培养计算思维和解决实际问题的能力都是非常有益的。

总的来说,这道题目提供了一个典型的模拟场景,要求我们使用编程来模拟实际事件,并根据给定的规则和条件做出判断。通过解决这样的问题,我们可以加深对编程基本结构的理解,锻炼我们的逻辑思维,并提高解决实际问题的能力。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏驰和徐策

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值