106. m个人分n种水果

m个人分n种水果,不同种水果的个数用fruit表示,每一个人不同拥有同种水果,求所有人分到水果的个数最大值。
【双循环:对水果种类、各个人数】(只要水果种类没有分完就对每一个人遍历)
【循环中双判断:是否得到过当前水果,当前水果是否分配完、下种水果是否存在】
是否分配给同一个相同的水果,当前水果数是否分完

# m个人平均瓜分n种水果, fruit表示n种水果个数不同,person表示不同人得到的各自水果标记
# 三人分三种水果
n = 3 
m = 3
fruit = [2,3,4]

# 5人分2种水果
n = 2  
m = 5  
fruit = [2,4]

# 3人分4种水果
n = 4  
m = 3  
fruit = [6,7,2,1]

person = [ [] for i in range(m)] 
fruiti = 0  
j = 'fruit' + str(fruiti)  
j_num = 0 
 
# 只要水果种类没有分完,就对每个person赋予水果
while fruiti < n:
    for i in range(m):  
         
        # personi没有得到过待分水果j,且fruiti索引的这种水果j没有分完
        if j not in person[i]:  
            if j_num < fruit[fruiti]:  
                person[i].append(j)
                j_num += 1
            elif j_num >= fruit[fruiti]:  # j分完了则用下一种索引为fruiti的水果
                fruiti += 1
                if fruiti < len(fruit): #当然下一种需要存在,否则结束程序
                    j = 'fruit' + str(fruiti)
                    person[i].append(j)
                    j_num = 1
                else:
                    break 

        # personi没有得到过待分水果j
        else: 
            fruiti += 1
            if fruiti < len(fruit): # 下一种索引为fruiti的水果存在解急需,否则结束程序
                j = 'fruit' + str(fruiti)
                person[i].append(j)
                j_num = 1
            else:
                break
            
            
max0 = len(person[0])
for i in person:
    max0 = min(max0, len(i))  # 水果超出的部分无效

print(max0)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。