import sys
for line in sys.stdin:
a = line.split()
n =int(a[0])
m=int(a[1])
arr=[1]*n # 每个元素至少为1
# 余量
k= m-n
base =k//n # 整数部分 平均分配到每个元素
for i in range(0,n):
arr[i]+=base
r =k%n # 余数分配到[0:r]每个元素
print()
for i in range (0,r):
arr[i]+=1
for it in arr:
print(it)
方法思路
初始构造:每个元素至少为1,这样初始和为n。剩下的余量k = m - n需要分配到各个元素中。
均匀分配:将余量k分成两部分,一部分是均匀分配的部分base = k // n,另一部分是余数r = k % n。
处理余数:将余数r分配到前r个元素,每个元素增加1。这样可以保证所有元素的和正好为m。
解决代码
python
Copy Code
n, m = map(int, input().split())
k = m - n
base = k // n
remainder = k % n
result = [1 + base] * n
for i in range(remainder):
result[i] += 1
print(' '.join(map(str, result)))