P1887 乘积最大3 || CODE [VS] 3370 乘积最大3

题目描述

请你找出M个和为N的正整数,他们的乘积要尽可能的大。

输出字典序最小的一种方案。

输入输出格式

输入格式:

 

一行,两个正整数N,M

 

输出格式:

 

M个和为N的,乘积尽可能的大的正整数。

输入输出样例

输入样例#1: 复制
6 3
输出样例#1: 复制
2 2 2

说明

对于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

原文地址:https://www.cnblogs.com/Mary-Sue/p/9189943.html