字符串的组合

来源:互联网 发布:协方差矩阵是正定的吗 编辑:程序博客网 时间:2024/06/16 09:19

要求:输入一个字符串,输出该字符串的所有组合。如:若字符串为:abc,则应输出:(空集),a、b、c、ab、ac、bc、abc.

思路:考虑到数学中的排列组合知识,我们知道所谓组合即是在字符串中选取某些字符组合在一起,而在二进制中我们可以用0代表未选取某字符,1代表选取了某字符,这样自然可以想到用位运算来实现该过程。位运算结果为1则代表该位被选取。如000代表空集,001代表选取最后一个字符,即c,100代表a。依次类推。

注:注意全排列与组合的不同。

基于上述思路,代码如下:
[html] view plain copy
  1. #include<iostream>  
  2. using namespace std;  
  3.   
  4. char str[] = "abcde";  
  5.   
  6. void print_subset(int n , int index)  
  7. {  
  8.     printf("{");  
  9.     for(int i = 0 ; i < n ; ++i)  
  10.     {  
  11.         if( index&(1<<i) )         // 判断index的二进制中哪些位为1,即代表取某一位  
  12.             printf("%c ",str[i]); //输出选取位对应的字符  
  13.     }  
  14.     printf("}\n");  
  15. }  
  16.   
  17. void subset(int n)  
  18. {  
  19.     for(int index0 ; index < (1<<n) ; index++)//因为长度为n的字符串的组合数为2^n,所以index<2^n(即1<<n)  
  20.     {  
  21.         print_subset(n,index);  
  22.     }  
  23. }  
  24.   
  25. int main(void)  
  26. {  
  27.     subset(5);  
  28.     return 0;  
  29. }  
程序运行结果如下:


转载自:http://blog.csdn.net/htq__

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 想离婚想要孩子怎么办 一二年级成绩差怎么办 高考复读又失败怎么办 孩子不想估成绩怎么办 手机信号被屏蔽了怎么办 西安市旅游年卡怎么办 广电宽带网速慢怎么办 电视智能卡坏了怎么办 家乐卡二次授信怎么办? 邢台银行倒闭了怎么办 不敢和导师交流怎么办 考上一个破大学怎么办 腻子粉检测报告怎么办 电子厂插件很慢怎么办 预付费电表跳闸怎么办 电费有疑问怎么办大连 农村电表箱坏了怎么办 农村电表没电怎么办 家里电费特别高怎么办 电表读卡失败怎么办 电表卡消磁了怎么办 智能表采集失败怎么办 电脑没有蓝牙功能怎么办 判决后无力偿还怎么办 dz47-63c63跳闸怎么办 租房合同丢了怎么办 北京土地承包合同丢失怎么办 租赁合同丢失了怎么办 房屋租赁合同丢失怎么办 学校没发学生证怎么办 学校银行卡丢了怎么办 报税名字忘了怎么办 地税零申报漏报怎么办 欠中联重科施工电梯钱怎么办 大型船舶起锚正横后怎么办 老师不会教孩子怎么办 个体工商营业证怎么办 广州市住房公积怎么办 苹果账号禁用了怎么办 换单位后公积金怎么办 青岛不发工资怎么办