您的位置:首页 > 编程语言 > C语言/C++

C++15道基础算法题---(2)排列组合

2016-08-03 17:52 435 查看
两种排列组合问题:

abc acb bac bca cab cba

a b c ab ac bc abc

1.第一种

交换问题。

#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <map>
using namespace std;

//全排列 ab ba

void swap(char *i,char *j){
char tmp=*i;
*i=*j;
*j=tmp;
}

int main(){
string s;
while(cin>>s){
int count=1;
int len=s.length();
for(int i=0;i<len-1;i++){
for(int j=i+1;j<len;j++){
swap(s[i],s[j]);
count++;
swap(s[i],s[j]);
}
}
cout<<count<<endl;
}
return 0;
}


1.第二种

使用位运算。

//全排列  a b ab
int a[] = {1,3,5,4,6};
char str[] = "abcde";

void print_subset(int n , int s)
{
printf("{");
for(int i = 0 ; i < n ; ++i)
{
if( s&(1<<i) )         // 判断s的二进制中哪些位为1,即代表取某一位
printf("%c ",str[i]);   //或者a[i]
}
printf("}\n");
}
void subset(int n)
{
for(int i= 0 ; i < (1<<n) ; ++i)
{
print_subset(n,i);
printf("--------------------\n");
}
}

int main(void)
{
subset(5);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言