题意求N1+N2+…+Nn=N. 使N1 ,N2…Nn都不相等且他们的乘积最大?
做法就是求出以2起始的最大连续自然数序列之和sum,使得sum的值不超过输入数n,
然后分情况讨论:
设此最大序列为2、3、……、w,则:
1。若剩余值(n-sum)等于w,则最后输出序列为:3、4、……、w、w+2,即将原最大序列每
项加1,再将最后剩余的一个1加到最后一项上。(这一项结果很显然)
2。若剩余值(n-sum)小于w,则从序列的最大项i开始,从大到小依次将每项加1,直到剩余
值用完。 (若将其按其他方式相加将会引起冲突即有两项是相等的)
解题代码
按照上述思路实现即可
#include <iostream>
using namespace std;
int main()
{
int n,i=2;
cin>>n;
int sum=0;
while(sum+i<=n){
sum+=i;
i++;
}
int w=i-1;
int m = n-sum;
if(m==w){ //若剩余值(n-sum)等于w
for(int j=2;j<=i-2;j++){
cout<<j+1<<" ";
}
cout<<i+1<<en dl;
}
else{ //若剩余值(n-sum)小于w
for(int j=2;j<w-m+1;j++) cout<<j<<" ";
for(j=w-m+1;j<=i-1;j++) cout<<j+1<<" ";
cout<<endl;
}
}
Seen
2015-09-18