全排和组合

全排列n!: 
 1 #include <iostream> 
 2 using namespace std; 
 3  
 4 void Perm(int k,int n,int a[]){  
5     if(k==n){ 
 6         for(int i=0;i<n;i++)  
7             cout<<a[i]<<' '; 
 8         cout<<endl;  
9         return; 
10     } 
11     for(int i=k;i<n;i++){ 
12         swap(a[k],a[i]); 
13         Perm(k+1,n,a); 
14         swap(a[i],a[k]);      //回溯 
15     } 
16 } 
17 int main(){ 
18     int i,n,a[10];
 19     while(cin>>n,n){ 
20         for(i=0;i<n;i++) a[i]=i+1; 
21         Perm(0,n,a);
 22     }
 23     return 0; 
24 } 

组合数C(n,k): 
 1 #include <iostream>  2 using namespace std;  3  
 4 bool visited[10]; 
 5 void dfs(int pos,int cnt,int n,int k,int a[]){  
 6     if(cnt==k){ 
 7         for(int i=0;i<n;i++) 
 8             if(visited[i]) cout<<a[i]<<' '; 
 9         cout<<endl; 
10         return; 
11     } 
12     if(pos==n) return; 
13     if(!visited[pos]){ 
14         visited[pos]=true; 
15         dfs(pos+1,cnt+1,n,k,a); 
16         visited[pos]=false;    //回溯 
17     } 
18     dfs(pos+1,cnt,n,k,a); 
19 } 
20 int main(){
 21     int i,n,k,a[10]; 
22     while(cin>>n>>k,n||k){
 23         for(i=0;i<n;i++) a[i]=i+1; 
24         dfs(0,0,n,k,a);
25     } 
26     return 0; 
27 }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值