CodeCombat 极值查找练习

数组 Max/Min 查找与函数封装(24-25关)

第 24 关

脆弱的士气 (Brittle Morale)

战术思路分析:击杀首领

敌人首领生命值最高。击败他可以瓦解敌人士气。你需要实现 Max Search 算法,找出**生命值最高**的敌人。

Max Search 函数封装

将查找逻辑封装进 `findStrongestEnemy(enemies)` 函数中,让主代码(寻找、攻击)变得更简洁。
比较依据:`enemy.health > strongestHealth`。

IF Enemy.HP > MaxHP:
  Strongest = Enemy
return Strongest

Python 程序解法

1
# 你只有一个弓箭手,要发挥他的作用
2
3
# 这将返回一个最多生命值的敌人
4
def findStrongestEnemy(enemies):
函数:返回生命值最高的敌人
5
strongest = None
初始化最强敌人为 None
6
strongestHealth = 0
初始化最高生命值
7
enemyIndex = 0
初始化索引
8
# 当 enemyIndex 少于enemies数组的长度
9
while enemyIndex < len(enemies):
遍历敌人数组
10
# 将enemy变量设置为enemies[enemyIndex]
11
enemy = enemies[enemyIndex]
获取当前敌人
12
# 如果 enemy.health 大于 strongestHealth
13
if enemy.health > strongestHealth:
进行生命值比较
14
# 将enemy赋值给strongest
15
strongest = enemy
更新 strongest
16
# 将enemy.health赋值为strongestHealth
17
strongestHealth = enemy.health
更新 highestHealth
18
# 让 enemyIndex 递增
19
enemyIndex += 1
索引步进
20
return strongest
返回最强敌人
21
22
enemies = hero.findEnemies()
获取敌人数组
23
leader = findStrongestEnemy(enemies)
找到首领
24
if leader:
如果找到首领
25
hero.say(leader)
报告首领位置(英雄会攻击)
第 25 关

疯狂Maxer 反击 (Mad Maxer Strikes Back)

战术思路分析:优先击杀最弱

最小的兽人(生命值最低)是最危险的,必须优先攻击。你需要实现 Min Search 算法,找出**生命值最低**的敌人。

Min Search 算法(最小查找)

1. **初始化:** `leastHealth = 99999` (设置一个比任何敌人生命值都大的起始值)。
2. **遍历与比较:** 如果当前 `enemy.health` **小于** `leastHealth`,则更新 `weakest` 和 `leastHealth`。

IF Enemy.HP < MinHP:
  MinHP = Enemy.HP
  Weakest = Enemy

Python 程序解法

1
while True:
外层无限循环
2
weakest = None
初始化最弱敌人
3
leastHealth = 99999
初始化最小生命值
4
enemyIndex = 0
初始化索引
5
enemies = hero.findEnemies()
获取敌人数组
6
# 循环检查所有敌人。
7
while enemyIndex < len(enemies):
遍历敌人数组
8
enemy = enemies[enemyIndex]
获取当前敌人
9
# 如果当前敌人的生命值小于 leastHealth
10
if enemy.health < leastHealth:
进行生命值比较
11
# 标记这个敌人为weakest,并设置 leastHealth 变量的值
12
weakest = enemy
更新 weakest
13
leastHealth = enemy.health
更新 leastHealth
14
# 别忘了给 enemyIndex 加 1
15
enemyIndex += 1
索引步进
16
if weakest:
如果找到了最弱敌人
17
# 攻击最弱的食人魔。
18
hero.attack(weakest)
攻击