P1887 乘积最大3 || CODE [VS] 3370 乘积最大3
题目描述
请你找出M个和为N的正整数,他们的乘积要尽可能的大。
输出字典序最小的一种方案。
输入输出格式
输入格式:
一行,两个正整数N,M
输出格式:
M个和为N的,乘积尽可能的大的正整数。
输入输出样例
说明
对于100%的数据, 1 <= N <= 10^9,1 <= M <= 10^6
是个数学题,感觉像个贪心。。。
hhh,今儿心情真不好,某人真是让我鄙视的不行。
人至贱,则无敌啊,
也不是完全算吧,
就是幼稚,可笑,还自以为有多厉害是吗,
呵呵了。
当大家都不喜欢你,在背后议论你,
你还很开心的跑过来问:
“哇,我听到你们提到我了耶,说我什么了呢?”,
hhh,装的真可爱,
明明是傻白甜,天天在我面前装高冷。
恶心。你就天天拍她们的马屁吧。。。
不扯这些了,烦心。
其实越看越像个贪心题。
如果n能整除m,那么分成m个n/m他们的乘积就最大。
如果不能整除的话,那就先按n减去n除以m的余数是新的n,
m-余数是新的m,跟第一种情况一样算出前一部分的。
然后后一部分就剩下余数个数了,
这些数的和比余数个新n/新m的和打了正好余数,
所以循环枚举,每个数加1输出就好了。
说不明白,也可能有问题,具体看代码理解吧。。。
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 using namespace std; 7 8 int n,m; 9 10 int main() 11 { 12 scanf("%d%d",&n,&m); 13 if(n%m==0) 14 { 15 for(int i=1;i<=m;++i) 16 printf("%d ",n/m); 17 return 0; 18 } 19 else 20 { 21 int l=n%m; 22 n-=l; 23 for(int i=1;i<=m-l;++i) 24 printf("%d ",n/m); 25 for(int i=1;i<=l;++i) 26 printf("%d ",n/m+1); 27 return 0; 28 } 29 }
如果你不开心,那我就把右边这个帅傻子分享给你吧,
你看,他这么好看,跟个zz一样看着你,你还伤心吗?
真的!这照片盯上他五秒钟就想笑了。
一切都会过去的。
时间时间会给你答案2333