【BJFUOJ】小孙同学(贪心算法)

一、题目:

二、思路:

这段代码的主要思路是解决一个问题:给定一个位置 n,计算达到该位置的最小跳跃次数。

代码的逻辑如下:

  1. 首先,通过 cin 语句读取一个整数 t,表示测试用例的数量。
  2. 接下来,使用一个 while 循环,重复执行下面的操作 t 次。
  3. 在循环内部,通过 cin 语句读取一个整数 n,表示目标位置。
  4. 然后,开始计算最小跳跃次数。首先检查 n 的值:
  • 如果 n 等于 1,返回值为 2,表示只需一次跳跃即可到达目标位置。
  • 如果 n 等于 2,返回值为 1,表示只需一次跳跃即可到达目标位置。
  1. 如果 n 不等于 1 或 2,我们需要继续计算跳跃次数。首先,使用取模运算符 % 计算 n 除以 3 的余数,并将结果保存在变量 t 中。
  2. 如果 t 等于 0,表示 n 可以被 3 整除,即 n 是 3 的倍数。此时,跳跃次数为 n 除以 3。
  3. 如果 t 不等于 0,表示 n 不能被 3 整除。这时,我们需要再进行一次额外的跳跃,所以跳跃次数为 n 除以 3 加上 1。
  4. solve() 函数返回计算得到的最小跳跃次数。
  5. 在循环结束后,通过 cout 语句和 endl 换行符输出最小跳跃次数。

总体而言,这段代码使用了简单的输入和输出操作,通过条件判断和运算符,以及一个 while 循环,计算达到目标位置的最小跳跃次数。希望这个简要的说明能够帮助你理解代码的思路。如果还有其他问题,请随时提问!

三、源码:

#include <iostream>

using namespace std;

int solve() {
    int n;
    cin >> n;
    //1、2需特殊处理
    if (n == 1)
        return 2;
    if (n == 2)
        return 1;
    //贪心,最后一步之前全部走3
    int t = n % 3;
    if (t == 0)
        return n / 3;
    else//如果余1、2,需要让前一步走2,再走一步:2、3到达目标点;
        return n / 3 + 1;
}

int main() {
    int t;
    cin >> t;
    while (t--)
        cout << solve() << endl;
}

欢迎改正与补充

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇