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

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

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

题目:按字典顺序列出全部子集

内容:

请写一个程序用字典顺序把一个{1,2,3,4,...,n}集合的全部子集找出来。

解答:

想必我就不用解释什么是字典顺序了,作为乘虚猿和攻城狮大家应该懂得,无论你懂不懂,反正我懂了!

事实上我们能够先列出一个实例,观察规律:

比如n=3

{1}

{1,2}

{1,2,3}

{1,3}

{2}

{2,3}

{3}

能够看出这种规律(假设你说我怎么没看出来,事实上你能够再多看一会!)

令一个指针指向第一个元素,假设指针指向的元素小于n就使指针加一,后指针指向元素等于指针指向前一个元素加一。当指针指向元素等于n时,指针回指一位即指针减一,指针指向元素加以,当指针指向位置为初始位置时,指向元素等于n则输出结束了。

事实上这个规律也不是观察实例得出的,这就是我们在按字典排序时做的事情,仅仅只是人的大脑速度太快,非常多过程一步到位而已,假设不信,你拿出一本字典慢慢尝试看看是不是这种!

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

#include 
using namespace std;int _tmain(int argc, _TCHAR* argv[]){ void subsetInDic(int n); int n; cout << "请输入一个n:"; cin >> n; cout << endl; cout << "求出子集按字典顺序排列的结果为:" << endl; subsetInDic(n); getchar(); getchar(); return 0;}void subsetInDic(int n){ int i,j,set_Index = 0; int subsetNum[1000]; subsetNum[set_Index] = 1; cout << "{ }" << endl; while (true) { cout << "{ "; for (i = 0; i <= set_Index; i++) cout << subsetNum[i] << " "; cout << "}"; cout << endl; if (subsetNum[set_Index] < n) { subsetNum[set_Index + 1] = subsetNum[set_Index] + 1; set_Index++; } else if (set_Index != 0) subsetNum[--set_Index] += 1; else break; }}

实验结果:

最后感谢 @hikean 同学在  《列出全部子集》中给给出的更简便,效率更快的方法。欢迎大家能给出更好的方法!

欢迎大家添�每日一小练,嘿嘿!

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


            -End-

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

转载于:https://www.cnblogs.com/hrhguanli/p/3774800.html

你可能感兴趣的文章
标识符
查看>>
给大家分享一张CSS选择器优选级图谱 !
查看>>
Node.js 入门:Express + Mongoose 基础使用
查看>>
一步步教你轻松学奇异值分解SVD降维算法
查看>>
objective-c overview(二)
查看>>
python查询mangodb
查看>>
驱动的本质
查看>>
Swift的高级分享 - Swift中的逻辑控制器
查看>>
Python数据分析入门案例
查看>>
vue-devtools 获取到 vuex store 和 Vue 实例的?
查看>>
内存地址对齐
查看>>
创新课程管理系统数据库设计心得
查看>>
Could not resolve view with name '***' in servlet with name 'dispatcher'
查看>>
pandas 修改指定列中所有内容
查看>>
lua语言入门之Sublime Text设置lua的Build System
查看>>
vue.js基础
查看>>
电脑的自带图标的显示
查看>>
[转载] redis 的两种持久化方式及原理
查看>>
C++ 删除字符串的两种实现方式
查看>>
ORA-01502: 索引'P_ABCD.PK_WEB_BASE'或这类索引的分区处于不可用状态
查看>>