🗺️ 计算机科学 4
第 21-23 关
🔎 📋 👣

认识“数组迭代” (二)

Advanced Array Iteration

核心任务:
1. 找出特殊的那个 (Min/Max)
2. 跳着数数 (Step)

#21 沙蛇 #22 奇数沙尘暴 #23 疯狂的Maxer
🐍 🪙 📏

关卡 21:找到“最近”的金币

任务目标

沙漠里全是硬币,眼镜坏了 (findNearest 不可用),我要自己写代码找到离我最近的那一枚!

思考方法:打擂台

  1. 假设最近距离是无限大 (9999)。
  2. 一个一个看硬币。
  3. 比较 (Compare):如果这枚硬币比我之前记录的更近,那它就暂列第一!
auto nearest = null;
float minDist = 9999; // 初始设个超级大的数
int index = 0;

while (index < coins.size()) {
    auto coin = coins[index];
    float dist = hero.distanceTo(coin);
    
    // 👇 挑战擂主!如果现在的更近
    if (dist < minDist) {
        nearest = coin;   // 更新最近的硬币
        minDist = dist;   // 更新最短距离记录
    }
    index++;
}
👹 🏹

关卡 23:找到“最远”的敌人

auto farthest = null;
float maxDist = 0;  // 初始设为 0 (最小)
int index = 0;

while (index < enemies.size()) {
    auto enemy = enemies[index];
    float dist = hero.distanceTo(enemy);
    
    // 👇 挑战擂主!如果现在的更远
    if (dist > maxDist) {
        maxDist = dist;     // 更新最长距离
        farthest = enemy;   // 更新最远的敌人
    }
    index++;
}

最大值算法

和找最小值完全相反:

  • 初始值设为 0 (不可能比这个更小)。
  • 判断符号变成 > (大于)。
这里有很多诱饵,
只有最远的那个才是真身!
🌪️ 🤝 👹

关卡 22:隔一个挑一个

我们要处理一个混合名单:兽人朋友 混在一起。

👹0
👱‍♀️1
👹2
👱‍♂️3
👹4
👱‍♀️5

偶数 Even (0, 2, 4)

是兽人 (Enemy) → 攻击!

奇数 Odd (1, 3, 5)

是朋友 (Friend) → 跳过!

跳着走:Step / Stride

平时我们是一个一个数:index++ (即 index += 1)

这次我们要跳着数index += 2

就像玩跳房子!
从 0 跳到 2,再跳到 4...
直接略过了中间的 1, 3, 5。
auto everybody = {"Yetu", "Tabitha", "Rasha"...};
int index = 0;

while (index < everybody.size()) {
    auto enemy = everybody[index];
    
    // ⚔️ 攻击兽人
    hero.attack(enemy);
    
    // 🏃‍♂️ 关键:每次加 2,跳过朋友!
    index += 2;
}

📚 数组迭代三大模板

这些代码以后会经常用到,请记在小本本上!

1. 普通遍历

每一个都看

index++
👀

2. 跳跃遍历

隔一个看一个

index += 2
🐇

3. 找最好 (Min/Max)

打擂台法

if (score > best)
🏆