题目就是要找一个有不同元素的序列,使得它们的和为给出的整数N,并且
它们的积最大。其实这样的一个序列满足这样的性质:
它们的积最大。其实这样的一个序列满足这样的性质:
1.4>a1>1
2.a[i+1]-a[i]<=2(假设该序列按升序排列)
3.a[i+1]-a[2]=2的情况最多有1个
由此可以轻松构造出该序列:
1.从2开始累加,直到和m大于等于n
2.j=m-n,把序列中的j划去(当j=1时,划去2并将最后一个元素加1)
具体代码如下:
具体代码如下:
- #include <iostream>
- using namespace std;
- int an[100];
- void input()
- {
- int N;
- while(cin>>N)
- {
- int sum = 0,i=2,j=2,k;
- memset(an,0,sizeof(an));
- while(sum<=N)
- {
- an[i]=i;
- sum+=i;
- i++;
- }
- // cout<<sum<<" "<<i<<endl;
- int flag = sum-N;
- if(flag == 1)
- {
- an[2] = 0;
- an[i-1]++;
- }
- else an[flag] = 0;
- //cout<<flag<<endl;
- //cout<<an[3]<<endl;
- for(k=0;k<i;++k)
- {
- if(an[k] == 0) continue;
- cout<<an[k]<<" ";
- }
- if(an[k]) cout<<an[k]<<endl;
- }
- }
- int main()
- {
- input();
- return 0;
- }