1208: 【数组】狐狸捉兔子

题目描述

    上机练习5.1.7   围绕着山顶有10个洞,一只狐狸和一只兔子各住一个洞。狐狸总想吃掉兔子。一天兔子对狐狸说:“你想吃我有一个条件,先把洞从1~10编上号,你从10号洞出发,先到1号洞找我;第二次隔1个洞找我,第三次隔2个洞找我,以后依此类推,次数不限。若能找到我,你就可以饱餐一顿。不过在没有找到我以前不能停下来。”狐狸满口答应就开始找了,它从早到晚找了1000次洞,累得昏了过去也没有找到兔子。请问,免子躲在几号洞里?

输入

    无输入。

输出

    一行,按顺序输出兔子可能躲藏的洞的编号,用空格分隔,行尾不能有空格。

#include <iostream>

#include <cmath>

using namespace std;

// 函数声明:判断兔子是否能躲在一个特定的洞中不被狐狸找到

bool canHideInHole(int rabbitHole) {

    int foxHole = 10; // 狐狸初始位置在10号洞

    for (int i = 0; i < 1000; ++i) { // 狐狸最多查找1000次

        // 计算狐狸这次要找的洞,步长为i+1

        int step = i + 1;

        foxHole = ((foxHole - 1 + step) % 10) + 1; // 更新狐狸的位置

         

        // 检查是否找到了兔子

        if (foxHole == rabbitHole) {

            return false; // 兔子被找到了,返回false

        }

    }

    return true; // 兔子躲过了所有的查找,返回true

}

int main() {

    bool foundSafeHoles = false; // 标记是否已经找到安全的洞

    for (int hole = 1; hole <= 10; ++hole) { // 遍历所有可能的洞(1到10)

        if (canHideInHole(hole)) { // 判断兔子是否能躲在这个洞中

            if (foundSafeHoles) {

                cout << " "; // 如果之前已经找到过安全的洞,则输出空格分隔

            }

            cout << hole; // 输出当前安全的洞编号

            foundSafeHoles = true; // 标记已经找到安全的洞

        }

    }

    cout << endl; // 输出换行符

    return 0; // 返回0表示程序正常结束

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

呱呱呱~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值