博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
每日一小练——列出全部子集
阅读量:6266 次
发布时间:2019-06-22

本文共 1049 字,大约阅读时间需要 3 分钟。

上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练!

题目:列出全部子集

内容:写一个程序,列出{1,2,3,4,...,n}这个集合的全部子集,包含空集{ }。

解决问题的算法应该有非常多种,只是我发现了一种非常easy也非常好玩的方法,就是用二进制表示几何元素的方法

比方假设n是3,则子集有(不包含空集){1}{2}{3}{1,2}{1,3}{2,3}{1,2,3}就是1*{0,1}and2*{0,1}and3{0,1}每一个组合出现一次,所以也能够看成是{0,0,1}{0,1,0}{0,1,1}{1,0,0}{1,0,1}{1,1,0}{1,1,1}所以就能够看成是二进制不断加一。

我的解法:上来没多想,打开vs2013就敲了起来,问题果然非常easy,分分钟就超神。。奥,不正确就攻克了!

#include 
using namespace std;int _tmain(int argc, _TCHAR* argv[]){ void showSubset(int n); int n; cout << "请输入一个n:"; cin >> n; cout << endl; cout << "求出子集的结果为:" << endl; showSubset(n); getchar(); getchar(); return 0;}void showSubset(int n){ //n += 1; int Subset[1000] = { 0 }; int i, j; cout << "{ }" << endl; while (true) { for (i = 0; i < n && Subset[i] == 1; Subset[i] = 0, i++); if (i == n) break; else { Subset[i] = 1; } cout << "{ "; for (j = 0; j < n; j++) { if (Subset[j] == 1) { cout << j+1 << " "; } } cout << "}"; cout << endl; }}
实验结果:

最后感谢 @daiweifeng 同学在  《高速Fibonacci数算法》中给我的提示。

欢迎大家增加每日一小练,嘿嘿!

每天练一练,日久见功夫,加油!


            -End-

參考文献:《c语言名题精选百则》

你可能感兴趣的文章
我们为什么需要量子计算
查看>>
Word文档转Markdown插件(Windows)
查看>>
JS 之正则表达式
查看>>
PXC 5.7 mysqldump: Error 2013
查看>>
HID Global荣膺 RFID行业最有影响力国际品牌奖
查看>>
上海市政府颁布智能汽车牌照,蔚来汽车成首批获此资格企业
查看>>
如何让机器理解汉字一笔一画的奥秘?
查看>>
云栖社区2017中国开发者调查报告
查看>>
记录CDH Spark2的spark2-submit的一个No such file or directory问题
查看>>
安装tomcat-7.0.61图文
查看>>
NEG+SBB指令组合的用处
查看>>
802.11bgn信道划分及WirelessMon规划频段
查看>>
LeetCode Array
查看>>
在IE6下发生Internet Explorer cannot open the Internet site错误
查看>>
jdbc数据源连接数据库和jdbc连接数据库
查看>>
bootstrap-面板中嵌套表格
查看>>
service password-encryption,enable secret,enable password区别
查看>>
小鹏汽车获得造车新势力第一块牌,提车的却不是消费者
查看>>
单节点Nginx+FastDFS安装配置<1>
查看>>
自制jquery可编辑的下拉框
查看>>