此题难度不算大,但是需要逻辑能力,需要知道如何分配数据。
#include <stdio.h>
void num(int n,long long m)
{
long long a[n];//定义一个数组,用来储存元素
for (int i=0;i<n;i++)//首先初始化元素,方便后续操作
{
a[i]=1;
}
long long s=m-n;//这里举个例子,前面的元素已经初始化了,比如n=5,m=10,a[5]={1,1,1,1,1},全部加起来后和10还相差5,所以这里将他们的差存储为s
for (int i=0;i<n&&s>0;i++)//接上面,a[5]={1,1,1,1,1},所以将剩余的值加到第一个数,a[5]={6,1,1,1,1},此时s=0,跳出循环,每个元素相加刚好为10
{
long long add=s;
a[i]+=add;
s-=add;
}
for (int i=0;i<n;i++)//循环输出每个元素
{
printf("%lld ",a[i]);
}
printf("\n");
}
int main() {
int n;
long long m;
scanf("%d%lld",&n,&m);
num(n,m);
return 0;
}