学习技能时间计算 | Mars Code AI刷题

143 阅读5分钟
  • 题目:

小U最近沉迷于一款养成类游戏,游戏中的角色拥有三项属性:体力、智力和武力,初始值均为0。随着每天的游戏进展,这些属性会逐步增加。增加情况由一个二维数组 growup 表示,每个元素是一个长度为3的一维数组,分别表示每天的体力、智力和武力增加值。例如,[[1, 1, 2], [2, 2, 1], [2, 1, 2]] 表示第一天体力增加1,智力增加1,武力增加2,第二天分别增加2,2,1,第三天分别增加2,1,2。

在游戏中,玩家可以通过学习新技能来增强角色,但前提是角色的三项属性必须达到技能学习的要求。每个技能的学习要求也用一个二维数组 skill 表示,数组中的每个元素是一个长度为3的一维数组,分别表示学习某个技能所需的最低体力、智力和武力值。

任务是根据 growup 和 skill 数组,计算出玩家在多少天内可以学习每个技能。如果无法满足某个技能的学习要求,则返回 -1

  • 解题思路:
  1. 首先,我们需要明确目标是根据每天属性的增长情况(由  growup  数组表示)以及每个技能的学习要求(由  skill  数组表示),来确定玩家在多少天内可以学习每个技能。如果无法满足学习要求,则返回 -1。
  2. 对于每个技能,我们需要从第一天开始,逐步累加每天的属性增加值,同时检查是否满足该技能的学习要求。
  3. 具体步骤如下:
  • 遍历  skill  数组中的每个技能要求。

  • 对于每个技能要求,再遍历  growup  数组中的每一天,累加当天的体力、智力和武力增加值到对应的属性变量上。

  • 在每次累加后,检查当前的体力、智力和武力值是否满足该技能的学习要求。如果满足,记录下当前的天数并结束对该技能的检查;如果一直到遍历完所有天数都不满足,则返回 -1。

  • 示例图示(以简单示例说明计算过程):

假设  growup = [[1, 1, 1], [2, 2, 2], [3, 3, 3]] ,表示三天内每天的体力、智力和武力增加值。

假设  skill = [[3, 3, 3], [5, 5, 5]] ,表示有两个技能,第一个技能要求体力、智力和武力值至少达到3,第二个技能要求至少达到5。

  • 对于第一个技能:

  • 第一天:初始属性均为0,累加第一天的增加值后,体力 = 1,智力 = 1,武力 = 1。不满足技能要求。

  • 第二天:在第一天的基础上,累加第二天的增加值,体力 = 1 + 2 = 3,智力 = 1 + 2 = 3,武力 = 1 + 2 = 3。此时满足第一个技能的学习要求,记录天数为2。

  • 对于第二个技能:

  • 第一天:同上述过程,第一天结束后属性值未满足要求。

  • 第二天:属性值累加后也未满足要求。

  • 第三天:在第二天的基础上,累加第三天的增加值,体力 = 3 + 3 = 6,智力 = 3 + 3 = 6,武力 = 3 + 3 = 6。此时满足第二个技能的学习要求,记录天数为3。

Python代码如下:

`def days_to_learn_skills(growup, skill): result = [] for skill_req in skill: days = 0 current_strength = 0 current_intelligence = 0 current_force = 0

    for day_growth in growup:
        days += 1
        current_strength += day_growth[0]
        current_intelligence += day_growth[1]
        current_force += day_growth[2]

        if (current_strength >= skill_req[0] and
                current_intelligence >= skill_req[1] and
                current_force >= skill_req[2]):
            result.append(days)
            break
    else:
        result.append(-1)

return result`

 

代码详解:

  1. days_to_learn_skills  函数接受两个参数: growup  是一个二维数组,表示每天的体力、智力和武力增加值; skill  也是一个二维数组,表示每个技能的学习要求。函数返回一个列表,列表中的每个元素对应每个技能在多少天内可以学习,如果无法学习则为 -1。
  2. 首先,创建一个空列表  result ,用于存储每个技能可以学习的天数结果。
  3. 然后,通过一个外循环遍历  skill  中的每个技能要求  skill_req 。
  4. 对于每个技能要求,初始化以下几个变量:
  •  days :用于记录当前检查技能时已经经过的天数,初始值为0。
  •  current_strength 、 current_intelligence 、 current_force :分别用于记录当前的体力、智力和武力值,初始值均为0。
  1. 接着,通过一个内循环遍历  growup  中的每一天  day_growth 。
  • 每次循环,先将  days  加1,表示经过了一天。
  • 然后分别累加当天的体力、智力和武力增加值到对应的属性变量上,即  current_strength  加上  day_growth[0] , current_intelligence  加上  day_growth[1] , current_force  加上  day_growth[2] 。
  1. 在每次累加后,通过一个条件判断来检查当前的体力、智力和武力值是否满足该技能的学习要求。如果满足(即  current_strength  大于等于  skill_req[0] , current_intelligence  大于等于  skill_req[1] , current_force  大于等于  skill_req[2] ),则将当前的  days  值添加到  result  列表中,并通过  break  语句结束对该技能的内循环检查。
  2. 如果在内循环遍历完所有的  growup  天数后,都没有满足技能要求的情况,那么就执行  else  语句,将 -1 添加到  result  列表中。
  3. 最后,当外循环遍历完所有的  skill  技能要求后,函数返回  result  列表,其中包含了每个技能在多少天内可以学习或者 -1 表示无法学习的结果。