C++15道基础算法题---(2)排列组合
2016-08-03 17:52
435 查看
两种排列组合问题:
abc acb bac bca cab cba
a b c ab ac bc abc
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; }
相关文章推荐
- 排列组合算法之一: 01转换法_java改变后的c++版
- 排列组合算法之二: 01转换法_java改变后的c++改进版
- 算法:C++排列组合
- C++和java中关于全排列和组合的有关算法
- 算法基础:排列组合问题-全排列(Golang实现)
- 有人机交互能力的排列组合算法(C++版)
- 【算法基础】排列与组合
- 排列组合算法总结(基于C++实现)
- C++15道基础算法题---(1)合并已排序数组
- [互联网面试笔试汇总C/C++-11] 字符串全排列和组合算法
- 基础算法之排列组合生成算法
- 基础算法之排列组合生成算法
- 有人机交互能力的排列组合算法(C++版)
- 排列组合算法1:生成全部有序列
- 排列组合与回溯算法浅谈
- 全排列生成算法与组合数排列求法
- 基础算法测试——生成一个1-10之间的随机整数组合
- 基础算法测试——生成一个1-10之间的随机整数组合
- 排列组合问题的通用算法
- 基础算法测试——生成一个1-10之间的随机整数组合