洛谷不通过怎么办,看了几遍也不知道怎么错了,求助大佬们
题目描述
一个正整数一般可以分为几个互不相同的自然数的和,如 3=1+23=1+2,4=1+34=1+3,5=1+4=2+35=1+4=2+3,6=1+5=2+46=1+5=2+4。
现在你的任务是将指定的正整数 nn 分解成若干个互不相同的自然数的和,且使这些自然数的乘积最大。
输入格式
只一个正整数 n,(3≤n≤10000)。
输出格式
第一行是分解方案,相邻的数之间用一个空格分开,并且按由小到大的顺序。
第二行是最大的乘积。
输入输出样例
输入 #1
10
输出 #1
2 3 5 30
代码
#include <stdio.h>
#include <math.h>
int n,remaind_num;
int cnt = 0;
void stockpile(int max[]) {
int i;
int temp = 0;
for (i = 2;;i++) {
temp += i;
max[cnt] = i;
cnt++;
if (n - temp <= i) {
remaind_num = n - temp;
break;
}
}
}
void resolve(int max[]) {
int flag = 1;
int count = cnt - 2;
for (int i = 0; i < remaind_num;i ++) {
if (flag) {
max[cnt-1] += 1;
flag = 0;
}
else {
if (max[count] != 2) {
max[count] += 1;
count--;
}
else {
max[count] += 1;
count = cnt -2;
flag = 1;
}
}
}
}
int main () {
int max[100] = {0};
scanf ("%d",&n);
stockpile(max);
resolve(max);
int flat = 1;
for (int i = 0;i < cnt;i++) {
printf ("%d",max[i]);
flat *= max[i];
if (i != cnt -1) {
printf (" ");
}
else printf ("\n");
}
printf ("%d",flat);
}
洛谷评分