从 1∼n1∼n 任意挑出 rr 个数进行排列,请从小到大输出所有可能的排列结果。
如:n=5,r=2,则输出结果如下输入
1 2
1 3
1 4
1 5
2 1
2 3
2 4
2 5
3 1
3 2
3 4
3 5
4 1
4 2
4 3
4 5
5 1
5 2
5 3
5 4
输入
两个整数 n 和 r( n 和 r 都是 2∼6 之间的整数)
输出
1∼n 中满足条件的数的个数。
输入
50
输出
20
答案如下:
#include <bits/stdc++.h> using namespace std; int n,r; int a[10]; bool b[10]; void print(int k) { for(int i=1;i<=r;i++) { cout<<a[i]; if(i!=n) cout<<" "; } cout<<endl; } void dfs(int k) { for(int i=1;i<=n;i++) { if(b[i]==false) { a[k]=i; b[i]=true; if(k==r) { print(k); } else { dfs(k+1); } b[i]=false; } } } int main() { cin>>n>>r; for(int i=1;i<=n;i++) { a[1]=i; b[i]=true; dfs(2); b[i]=false; } }
制作不易,能点个赞吗,感谢!!!