1 条题解
-
0
C++ :
#include<cstdio> int a[101]; int n; void print(int k) { for(int i=1;i<k;i++) printf("%d ",a[i]); printf("%d\n",a[k]); } void go(int s,int k)//s表示是否加完,即与0相差多少;k表示当前是第k个数 { if(s==0) { print(k-1);//k的初始值为1,为了防止多输出一位,即用k-1 return; } for(int i=1;i<=s;i++) if(a[k-1]<=i&&i<n) { a[k]=i; s=s-i; go(s,k+1);//核心算法-回溯 s=s+a[k]; } } int main() { scanf("%d",&n); go(n,1); }
- 1
信息
- ID
- 878
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者