题目描述
给出一个数S,请你把它分解为若干个不同的正整数{a1,a2,...,an}之和,即a1+a2+...+an=S,并且使得a1*a2*...*an最大。
关于输入
一个正整数S(5<=S<=1000)
关于输出
输出分解后的结果,按从小到大的顺序输出。
例子输入
7
例子输出
3 4
#include<cstdio>
int main() {
int m, i, len = 0;
int num[10000] = { 0 };
scanf_s("%d", &m);
for (i = 2;; i++) {//依次增大,直到m<i时,不能再加入新的数字。
if (m >= i) {
num[len++] = i;
m -= i;
}
else break;
}
for (i = len - 1; i >= 0; i--) {//再将“剩余未分配的m”从大数到小数逐个+1,直至m=0全部分完。
if (m > 0) {
num[i]++;
m--;
if (i == 0) { i = len; }
}
else break;
}
printf("%d", num[0]);
for (i = 1; i < len; i++)
printf(" %d", num[i]);
return 0;
}