zoukankan      html  css  js  c++  java
  • 每日一小练——列出全部子集

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


    题目:列出全部子集


    内容:写一个程序,列出{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 <iostream>
    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语言名题精选百则》


  • 相关阅读:
    获取手机安装的所有包名adb shell pm list packages
    启动管理
    日志管理
    系统管理:进程管理、终止进程、工作管理、系统资源查看
    报数出局问题,类似约瑟夫环(链表写法)
    多项式的链式写法
    简易的C语言地铁购票系统
    68-js 前端实现标签值的切换
    67-foreach 取循环的次数
    66-mybatis 插入数据返回主键
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/3799921.html
Copyright © 2011-2022 走看看