23.
多人打车问题
共有10个人需要打出租车,每辆出租车至少一人,最多4人,尽量平均人数,则按从多到少划分,每辆出租车分别为[4, 3, 3];
请写一个通用算法,如果有m人需要打出租车,则按从多到少,每辆出租车该如何划分?
注:程序中需要按照下文的输入输出描述,进行对应的输入读取 与 相应格式的输出,否则程序执行不通过。
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32M,其他语言64M
输入描述:
一个int型整数
输出描述:
给每辆出租车分配的乘客人数的数组的字符串表示,如:[4,3,3]
示例1
输入例子:
10
输出例子:
[4, 3, 3]
例子说明:
输入数据为整数,根据这个整数计算出租车打车载人情况
def calculate(n):
reslist=[]
#第一类,人数<=4
if n<=4:
reslist.append(n)
return reslist
#第二类,人数是4的倍数
elif n%4==0:
for i in range(n//4):
reslist.append(4)
return reslist
#第三类,人数为5,[3,2]
elif n==5:
return [3,2]
#第四类,人数为6+4*n,[(4)...,3,3]
elif (n-6)%4==0:
if n==6:
return [3,3]
else:
for i in range((n-6)//4):
reslist.append(4)
reslist+=[3,3]
return reslist
#第五类,人数为7+4*n,[4,(4)...,3]
elif (n-7)%4==0:
for i in range((n-3)//4):
reslist.append(4)
reslist.append(3)
return reslist
#第六类,人数为9+4*n,[(4)...,3,3,3]
elif (n-9)%4==0:
if n==9:
return [3,3,3]
else:
for i in range((n-9)//4):
reslist.append(4)
reslist+=[3,3,3]
return reslist
n=int(input())
print(calculate(n))