Python 在修改数组的同时创建一个递增数组
问:你得到一个由n个整数组成的数组。您希望修改数组,使其增加,即每个元素至少与前一个元素一样大 每次移动时,可以将任何元素的值增加一。所需的最少移动次数是多少 输入: 五, 3 2 5 1 7 输出: 五, 我的解决方案尝试:Python 在修改数组的同时创建一个递增数组,python,arrays,python-3.x,recursion,Python,Arrays,Python 3.x,Recursion,问:你得到一个由n个整数组成的数组。您希望修改数组,使其增加,即每个元素至少与前一个元素一样大 每次移动时,可以将任何元素的值增加一。所需的最少移动次数是多少 输入: 五, 3 2 5 1 7 输出: 五, 我的解决方案尝试: 输入列表中的元素数 将列表中的元素作为字符串输入,并转换为整数列表 制作一个函数,将移动次数存储为非递增元素的差值。例:在列表[1,2,4,3]中,4大于3,因此它是非递增的,因此我找到了术语之间的差异,并将其添加到移动次数中 将差异添加到较小的项中(即将列表[1,2,4
a = input('')
b = list(map(int, a.split(' '))) # split string into a list of numbers
sum1 = 0
def moves(i):
global sum1
for i in range(len(b)-1):
if b[i] < b[i+1]:
sum1 += b[i] - b[i+1]
b[i + 1] += b[i] - b[i+1]
else:
moves(i+1)
print(sum1)
moves(0)
a=输入(“”)
b=list(map(int,a.split(“”))#将字符串拆分为数字列表
sum1=0
修订动议(i):
全球sum1
对于范围内的i(透镜(b)-1):
如果b[i]
实现中的错误是什么?如何纠正它?递归是完全错误的方法。你所需要的只是浏览一下列表。不要使用globals;只需返回最终结果。请注意,您的比较是反向的。你想要的情况是b[i]>b[i+1],而不是递归是完全错误的方法。你所需要的只是浏览一下列表。不要使用globals;只需返回最终结果。请注意,您的比较是反向的。你想要的是b[i]>b[i+1的情况,而不是 实施过程中出现了什么问题,我如何纠正
- 在函数中,不打印任何内容。但是,在调用
之前,打印moves(0)
,但此时sum1
的值仍然为0sum1
- 您正在混合递归和迭代:for循环本身已经覆盖了整个列表,并且(经过一些更正)已经接近迭代解决问题。仍然需要进行额外的递归调用。既然您已经将问题标记为“递归”,我想您应该想了解递归解决方案在原则上的外观
- 您的递归尝试将失败,因为
获取了一个参数moves(i)
,但您没有使用该参数值并立即覆盖i
for i循环中的i
。因此,每个递归调用都将再次迭代整个列表i
- 比较
是错误的,因为无论何时b[i]
此代码有效,但存在一些非功能性质量问题:b[i]b[i+1]: sum1+=b[i]-b[i+1] b[i+1]+=b[i]-b[i+1] 移动(i+1) 移动(0) 打印(sum1)
- 应该避免使用globals。这有很好的理由——我建议进行一些研究来理解原因,而不仅仅是把它当作教条来接受。您可以将它们的使用转换为函数参数和返回值的使用
- 有一些不必要的重复计算:
计算两次。这种冗余是不利的(搜索代码重复以了解原因)。您可以在这里使用一个临时变量只计算一次值,但有一种更简单的方法:做一点数学运算,找出b[i]-b[i+1]
将产生什么结果b[i+1]+=b[i]-b[i+1]
- 在函数中,不打印任何内容。但是,在调用
之前,打印moves(0)
,但此时sum1
的值仍然为0sum1
- 您正在混合递归和迭代:for循环本身已经覆盖了整个列表,并且(经过一些更正)已经接近迭代解决问题。仍然需要进行额外的递归调用。既然您已经将问题标记为“递归”,我想您应该想了解递归解决方案在原则上的外观
- 您的递归尝试将失败,因为
获取了一个参数moves(i)
,但您没有使用该参数值并立即覆盖i
for i循环中的i
。因此,每个递归调用都将再次迭代整个列表i
- 比较
是错误的,因为无论何时b[i]
此代码有效,但存在一些非功能性质量问题:b[i]b[i+1]: sum1+=b[i]-b[i+1] b[i+1]+=b[i]-b[i+1] 移动(i+1) 移动(0) 打印(sum1)
- 应该避免使用globals。这有很好的理由——我建议进行一些研究来理解原因,而不仅仅是把它当作教条来接受。您可以将它们的使用转换为函数参数和返回值的使用
- 有一些不必要的重复计算:
计算两次。这种冗余是不利的(搜索代码重复以了解原因)。您可以在这里使用一个临时变量只计算一次值,但有一种更简单的方法:做一点数学运算,找出b[i]-b[i+1]
将产生什么结果b[i+1]+=b[i]-b[i+1]
@user202729,它只会为所有内容返回0(将sum更改为sum1后)它的当前输出是什么?首先不要覆盖Python的内置变量sum
@user202729,它只会为所有内容返回0(将sum更改为sum1后),谢谢,很多老实说,我只是随便打字sum
a = input('') b = list(map(int, a.split())) def moves(b): sum1 = 0 for i in range(len(b)-1): if b[i] > b[i+1]: sum1 += b[i] - b[i+1] b[i+1] = b[i] return sum1 print(moves(b))
a = input('') b = list(map(int, a.split(' '))) # split string into a list of numbers sum1 = 0 def moves(i): global sum1 if i < len(b)-1: if b[i] > b[i+1]: sum1 += b[i] - b[i+1] b[i+1] += b[i] - b[i+1] moves(i+1) moves(0) print(sum1)