保证有
#include <iostream>
#include <vector>
using namespace std;
int main () {
int n, m;
cin >> n >> m;
int extra = m - n; // 计算额外需要分配的数值(初始每个数为 1,总和为 n)
vector<int> res (n, 1); // 初始化数组为 n 个 1
// 从第二个数开始,尽量让序列保持递增
for (int i = 1; i < n && extra> 0; ++i) {
// 确保当前数至少比前一个数大 1,计算需要的增量
int need = res [i-1] + 1 - res [i];
// 实际分配的增量(不超过剩余的 extra)
int add = min (need, extra);
res [i] += add;
extra -= add;
}
// 若还有剩余的数值,全部加到最后一个数上(不破坏递增性)
if (extra> 0) {
res.back () += extra;
}
// 输出结果
for (int i = 0; i < n; ++i) {
cout << res [i] << (i == n-1 ? "\n" : " ");
}
return 0;
} 亲测通过
import sys for line in sys.stdin: a = line.split() x,y = int(a[0]) ,int(a[1]) print((x-1)*'1 '+ str(y-x+1))无脑用n-1 个1相加如何呢
usrInput = list(map(int, input().split())) for i in range(usrInput[0] - 1): print(1, end=' ') print(usrInput[1] - usrInput[0] + 1)
#include <iostream>
using namespace std;
int main() {
int n = 1;
int m=1;
int a = m / n;
int b = m % n;
if (a == 0)
{
for (int i = 0; i < n; i++)
{
cout << a << " ";
}
}
else
{
cout << a + b << " ";
for (int i = 0; i < n - 1; i++)
{
cout << a << " ";
}
}
}主打一个投机倒把,就是想让脑子偷懒 n,m = map(int,input().split()) a = max(m//n,1) # 整除,并保证为正整数 for _ in range(n-1): # 前n-1个数取a print(a) print(m-(n-1)*a) # 最后一个数取剩余量感觉我没看懂题目啊,为什么我这样写不行?