1 条题解

  • 0
    @ 2025-8-24 21:15:54

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Maxmilite
    **

    搬运于2025-08-24 21:15:53,当前版本为作者最后更新于2024-01-21 22:49:00,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    Source & Knowledge

    2024 年 1 月语言月赛,由洛谷网校入门计划/基础计划提供。

    题目大意

    一行 nn 个格子,每个格子上有一个整数 aia _ i。从 11 号点起跳,每次从 ii 号点跳到 ai+ia _ i + i 的位置。当跳跃到 n\geq n 号位后停止跳跃。求问能否恰好跳到 nn 号位,一共条约多少次。

    题目分析

    本题考察对循环结构的运用。

    由于 ai1a _ i \geq 1,因此每一次一定有 i+ai>ii + a _ i > i,因此玩家一定会不断向右跳跃。

    不使用数组的做法是,使用一个变量 cc(初始值为 11)记录当前所在的位置。在循环读入 for (int i = 1; i <= n; ++i) { cin... } 的过程中,如果 i=ci = c,则让 cc 变为 c+xc + xxx 是当前循环读入的变量)即可。

    在过程中同时使用一个变量记录跳跃次数。当 cc 有变化时使变量自增 11 即可。最终输出 cc 是否等于 nn 以及记录跳跃次数的变量即可。

    核心代码如下:

    int c = 1, cnt = 0;
    for (int i = 1; i <+ n; ++i) {
        cin >> x;
        if (c == i) {
            c = c + x;
            ++cnt;
        }
    }
    if (c == n) {
        cout << "Yes" << endl;
    } else {
        cout << "No" << endl;
    }
    cout << cnt << endl;
    

    视频讲解

    • 1

    信息

    ID
    9724
    时间
    1000ms
    内存
    512MiB
    难度
    1
    标签
    递交数
    0
    已通过
    0
    上传者