1 solutions
-
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
Information
- ID
- 18208
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By