python 分配物品

将N个物品分给M个人,如果N<M,则给前N个人各分1个,如果N>M,则每个人分N/M个,且向下取整,剩余数量补给最后一人,这个逻辑怎么用代码实现呢?
例如2个物品分给甲乙丙三人,则甲和乙各一个,丙没有;4个物品分给甲乙丙三个人,则甲乙各一个,丙两个

就按照你说的逻辑去实现就可以了。但是你的逻辑很不自然地存在2套,其实更合理的是,如果N>M,每个人分N//M,并且前几个人每人分一个剩余的。这样代码和逻辑也统一了。

这种?感觉合适采纳下,谢谢

img

示例代码:

def distribute_items(N, M):
    if N < M:
        items_per_person = [1] * N  # 给前N个人各分1个
        items_per_person.extend([0] * (M - N))  # 剩余人数没有物品
    else:
        items_per_person = [N // M] * M  # 每个人分N/M个,向下取整
        remaining_items = N % M  # 剩余数量
        for i in range(remaining_items):
            items_per_person[i] += 1  # 将剩余物品依次补给前remaining_items个人

    return items_per_person

N = 4  # 物品数量
M = 3  # 人数

result = distribute_items(N, M)
print(result)


在上面的代码中,定义了一个名为distribute_items的函数,该函数接受物品数量N和人数M作为输入参数。根据给定的条件,首先处理特殊情况:当N < M时,给前N个人各分1个物品,剩余人数没有物品。然后,对于N >= M的情况,将每个人分配N/M个物品,使用整数除法向下取整。然后,计算剩余物品数量remaining_items,并将其依次补给前remaining_items个人。最后,函数返回一个列表,其中包含每个人分配到的物品数量。

在示例代码中,使用N = 4和M = 3作为示例输入,然后调用distribute_items函数,并打印结果。输出将是一个列表,其中包含每个人分配到的物品数量。在这个例子中,输出将是[1, 1, 2],表示甲和乙各分配到1个物品,丙分配到2个物品。

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7677195
  • 这篇博客你也可以参考下:Python练习题——第三题:求素数。编写一个函数,将大于整数m且紧靠m的k个素数存入到列表中,在命令行输入m和k。如果输入17和5,输出19,23,29,31,37。
  • 除此之外, 这篇博客: 【Python】第2次练习:子字符串输出、两位数乘法竖式运算、M与N的数学运算中的 1、子字符串输出 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 题目描述:要求完成示例程序:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬
    分两行输出 python语言程序设计
    python字符串可采用区间形式访问,采用[M:N]格式表示字符串中从M到N-1的子字符串

    name = ‘python语言程序设计’
    print(name[ ]) #在[]中填上合适的数字,使此语句输出python
    print(name[ ]) #在[]中填上合适的数字,使此语句输出语言程序设计

    #分两行输出 python语言程序设计
    name = 'python语言程序设计'
    print(name[0:6])   #在[]中填上合适的数字,使此语句输出python
    print(name[-6:])  #在[]中填上合适的数字,使此语句输出语言程序设计
    
  • 以下回答由chatgpt基于相关博客总结生成:

    首先,我们需要定义N个物品和M个人。假设N个物品存储在一个列表中,M个人存储在一个列表中。

    items = ['item1', 'item2', 'item3', ...]
    people = ['person1', 'person2', 'person3', ...]
    

    接下来,我们需要判断物品数量N和人数M的大小关系,并决定每个人分配多少个物品。我们可以使用条件语句来实现。

    if len(items) < len(people):
        items_per_person = 1
    else:
        items_per_person = len(items) // len(people)
    

    然后,我们需要按照分配规则将物品分配给人。我们可以使用循环遍历每个人,并根据索引取出对应的物品。

    for i in range(len(people)):
        person = people[i]
        start_index = i * items_per_person
        end_index = start_index + items_per_person
    
        person_items = items[start_index:end_index]
    
        print(f"{person}分配到的物品是:{person_items}")
    

    最后,我们要将剩余的物品分配给最后一个人。我们可以使用切片操作和负索引来获得最后一个人的物品。

    last_person = people[-1]
    last_person_items = items[len(people) * items_per_person:]
    
    print(f"{last_person}分配到的物品是:{last_person_items}")
    

    完整的代码如下:

    items = ['item1', 'item2', 'item3', ...]
    people = ['person1', 'person2', 'person3', ...]
    
    if len(items) < len(people):
        items_per_person = 1
    else:
        items_per_person = len(items) // len(people)
    
    for i in range(len(people)):
        person = people[i]
        start_index = i * items_per_person
        end_index = start_index + items_per_person
    
        person_items = items[start_index:end_index]
    
        print(f"{person}分配到的物品是:{person_items}")
    
    last_person = people[-1]
    last_person_items = items[len(people) * items_per_person:]
    
    print(f"{last_person}分配到的物品是:{last_person_items}")
    

    这样,我们就可以根据物品数量和人数将物品分配给人了。如果需要,可以根据实际情况进行适当的修改和优化。

def distribute_items(N, M):
    if N < M:
        distribution = [1] * N
        distribution.extend([0] * (M - N))
    else:
        distribution = [N // M] * M
        remainder = N % M
        distribution[-1] += remainder

    return distribution

N = 2
M = 3
result = distribute_items(N, M)
print(result)  # Output: [1, 1, 0]

N = 4
M = 3
result = distribute_items(N, M)
print(result)  # Output: [1, 1, 2]



import math

def distribute_items(N, M):
    # 初始化每个人的物品数量列表,初始值都为0
    items_per_person = [0] * M

    # 如果物品数量少于人数,则给前N个人各分1个
    if N < M:
        for i in range(N):
            items_per_person[i] = 1
    # 如果物品数量多于人数,则每个人分N//M个,且向下取整
    else:
        items_per_person = [N // M] * M
        # 剩余的物品数量补给最后一个人
        left_over = N % M
        items_per_person[-1] += left_over

    return items_per_person