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

来源:互联网 发布:navicat for mysql语法 编辑:程序博客网 时间:2024/06/10 05:26

两种排列组合问题:

  • 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 abint 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;}
0 0
原创粉丝点击