最优分解问题(C语言)--贪心策略

最优分解问题

题目描述
设n是一个正整数,现在要求将n分解为若干个互不相同的自然数的和,使这些自然数的乘积最大。
解题思路
根据数学中和定近积大,积定近和小的原则,可得
1、若a+b等于一个常数,则|a-b|越小,a*b就越大。要使得加数互不相同,又尽可能集中,那加数只能是连续的自然数了。
2、一个数能分解,分解后乘积会比之前更大。
具体代码实现

#include 
#define MAX 100 

int main(){
	int n;
	int a[MAX];
	printf("请输入正整数n:");
	scanf("%d",&n);
	int x=2;
	int index=0;
	a[index++]=x;
	n-=x;
	//将n分解放进数组
	while(n>a[index-1]){
		a[index]=a[index-1]+1;
		n-=a[index];
		index++;
	} 
	int num=index-1;
	//将余量加入从后向前分成1加入数组
	while(n){
		a[num]++; 
		num=(num-1+index)%(index); 
		n--;
	} 
	
	//计算最大乘积 
	int result=1;
	for(int i=0;i

你可能感兴趣的:(算法设计)