题目描述
请你找出 M 个和为 N 的正整数,他们的乘积要尽可能的大。
输出字典序最小的一种方案。
输入格式
一行,两个正整数 N,M
输出格式
MM 个和为 NN 的,乘积尽可能的大的正整数。
输入输出样例
输入 #1复制
6 3
输出 #1复制
2 2 2
说明/提示
对于100%的数据,1≤N≤1e9,1≤M≤1e6。数据保证 N≥M。
分析:要想M个数乘积最大,那么这M个数,要足够靠近,
假如把一个数x分成n个数,并且要让n个数靠近,第一个可以取到的最大的数就是x/n。
代码
#include<iostream>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
for(int i=m;i>=1;i--)
{
cout<<n/i<<" ";
n-=n/i;
}
return 0;
}
通过分析:n个数相差的最大值不会超过1.
因为n/m的值不超过m,我们又要所有数尽可能靠近,那么我们可以这这些数均分到n%m个数上。
#include<bits/stdc++.h>
using namespace std;
int m,n;
int main(){
cin>>m>>n;
int s=m%n;
for(int i=1;i<=n-s;i++){
cout<<m/n<<" ";
}
for(int i=1;i<=s;i++){
cout<<m/n+1<<" ";
}
return 0;
}