1. 程式人生 > >P1887 乘積最大3 || CODE [VS] 3370 乘積最大3

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

badge printf 最小 AC 問題 輸出 方案 一行 space

題目描述

請你找出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

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