Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
150955 | lrf820215 | 最优分解 | C++ | 解答错误 | 0 | 0 MS | 636 KB | 861 | 2024-06-10 10:06:24 |
#include<iostream> #include<vector> using namespace std; //将n分解为若互不相同的自然数的和 使他们的乘积最大 #define Max 100005 int main(){ int n; cin>>n; if(n<4) { cout<<4<<endl; return 0; } int arr[Max]={}; int m=n; // arr[0]=2; int c=2; int i; for( i=0;c<=m;i++){ arr[i]=c; m-=c; c++; } int cou=i;//一共有几个数 //如果有剩余的数 就从后往前平均分配到前的数字上 int avg = m/cou; int ex = m%cou; while(i){ arr[i]+=avg; if(ex) { arr[i]+=1; ex--; } i--; } int mul=1; for(int i=0;i<cou;i++){ mul*=arr[i]; } cout<<mul; }