Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
150954 lrf820215 最优分解 C++ 解答错误 0 0 MS 204 KB 875 2024-06-10 10:05:39

Tests(0/10):


#include<stdio.h> #include<string.h> int a[1000]; int solve(int n) { if(n<5) return n; memset(a,0,sizeof(a)); int k=1,sum=1; a[1]=2; n=n-2; while(n>a[k]) { k++; a[k]=a[k-1]+1; n=n-a[k]; } for(int i=1; i<=k; i++) printf("%d ",a[i]); printf("\n"); /*如果n剩下的值等于a[k],那么均匀分配前面则多1,所以a[k]再加1 比如n=19 分解成 2,3,4,5 剩下n=5 均匀分配给前面各项2+1,3+1,4+1,5+1,此时多1再添加再最后一项即可 */ if(n==a[k]) { a[k]++; n--; } for(int i=0; i<n; i++) a[k-i]++; for(int i=1; i<=k; i++) sum*=a[i]; return sum; } int main() { int n; scanf("%d",&n); int t=solve(n); printf("%d\n",t); return 0; }


测评信息: