提交时间:2024-06-10 10:05:39

运行 ID: 150954

#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; }