题目:将一个数分成几个不同的数之和,满足这些数的乘积最大。
刚开始,没有看清“不同”两个字,发现一个数被分成两个数的两个积满足最大,则两个数的差一定要最小。即有两种情况:
(1)奇数(2*n+1):则可以分为n和(n+1);
(2)偶数(2*n):则可以分为n和n;
一直分下去,同时考虑到,4 = 2*2,即小于4的数,不用再分了,因为再分其乘积就小于原来的数了。于是,按照这个思路,有如下代码:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class Parliament{
friend istream& operator>>(istream &is, Parliament& p)
{
is>>p.delegates;
return is;
}
public:
void solution(void)
{
calNum(d