将列表中的数字分成 K 等份

Posted

技术标签:

【中文标题】将列表中的数字分成 K 等份【英文标题】:Splitting number in list in K equal parts 【发布时间】:2021-07-07 03:48:25 【问题描述】:

我正在尝试解决一个问题,在该问题中,我将列表棒分成由 K 给出的相等大小。

输入:stick = [5, 9, 7], K = 4

这意味着我们有三根长度分别为 5、9 和 7 的棍子。我们希望通过切割这三根棍子得到 K=4 等长的棍子。我们希望得到 K=4 等长的棍子。

更新说明:

从第一根长度为 5 的棍子,我们可以得到一根长度为 4 的棍子。

从第二根长度为 9 的棍子开始,我们可以得到两根长度为 4 的棍子。

从长度为 7 的第三根棍子开始,我们可以得到一根长度为 4 的棍子。

我的代码如下:

stick = [5,7,9]
K=4
for i in range(len(stick)):
    T = stick[i]%K
    if T !=0:
        print (stick[i],T)
    else:
        print (stick[i])

我的代码给了我下面的输出

5 1
7 3
9 1
 

但是我如何打印数字+它的加法

5 = 4 + 1
7 = 4 + 3
9 = 4*2 + 1

我的代码只给我输出1,3,1

预期输出:

Input: stick = [5, 9, 7], K = 4
Output: 4

Explanation:
Cut arr[0] = 5 = 4 + 1
Cut arr[1] = 9 = 2 * 4 + 1
Cut arr[2] = 7 = 4 + 3

示例 2:

Input: stick[] = 5, 9, 7, K = 3
Output: 5 \

Explanation:
Cut arr[0] = 5 = 5
Cut arr[1] = 9 = 5 + 4
Cut arr[2] = 5 = 5 + 2

【问题讨论】:

明确一点,我们是专门找整数结果的? @KarlKnechtel 是的 用你自己的话来说,你期望stick[i]%K 计算出什么 - 假设stick[i] 是原始棒之一的长度,K 是所需结果棒的总数?您打算如何解决这个问题 - 您将如何使用铅笔和纸手工解决? @KarlKnechtel 请注意,他们已经解决了这个问题。问题在于展示结果。 不是吗?巧合的是,正确的木棍长度等于所需木棍的数量。 【参考方案1】:

最好根据不同的条件构造一个字符串,然后打印出来:

stick = [5, 7, 8, 9]
K = 4
for i in range(len(stick)):
    T = stick[i] % K
    D = stick[i] // K

    # Construct the multiplier text (* ...) if necessary
    if D > 1:
        multiplier = f" * D"
    else:
        multiplier = ""

    # Construct the remainder (+ ...) text if necessary
    if T:
        remainder = f" + T"
    else:
        remainder = ""

    # Print the final result
    print(f"stick[i] = Kmultiplierremainder")

这应该打印出来:

5 = 4 + 1
7 = 4 + 3
8 = 4 * 2
9 = 4 * 2 + 1

更新:此答案假定 K 是问题中发布的原始代码中所暗示的所需长度。如果是拆分次数,则必须相应地更新逻辑,但您的实际问题的答案(即“如何以特定方式打印”)保持不变。

【讨论】:

以上是关于将列表中的数字分成 K 等份的主要内容,如果未能解决你的问题,请参考以下文章

为啥复合辛普森公式分成2n等份

将图像分成两等份python opencv

R:将矩阵分成等份,保留继承并保存部分

给定一个数字列表和一个数字 k,返回列表中的任意两个数字加起来是不是为 k

如何将一个数组分成N个等分的数组

leetcode 324 Wiggle Sort 2