题目描述
设n是一个正整数,现在要求将n分解为若干个互不相同的自然数的和,使这些自然数的乘积最大。
输入
输入一个n (n<=100)
输出
输出最大的乘积
样例输入
1
样例输出
1
如果不理解思路,代入数据算一下就明白了 ,1的结果是1,2的结果是2,3的结果是3
#include <stdio.h>
#include<iostream>
using namespace std;
int a[101];
void Devide(){
int n;
int k=1;
long long sum=1;
scanf("%d",&n);
if(n==1){
printf("1");
return ;
}
a[1]=2;
n-=2;
while(n>a[k]){
k++;
a[k]=a[k-1]+1;
n-=a[k];
}
if(n==a[k]){
a[k]++;
n--;
}
for(int i=0;i<n;i++)
a[k-i]++;
for(int j=1;j<=k;j++){
sum*=a[j];
}
printf("%lld",sum);
}
int main(){
Devide();
return 0;
}