提交时间:2024-06-10 10:06:24
运行 ID: 150955
#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; }