每日一算法:产生可能的集合(一)
来源:互联网 发布:阿里云ecs 1m带宽 编辑:程序博客网 时间:2024/05/22 13:14
问题描述:产生可能的集合
说明
给定一组数字或符号,产生所有可能的集合(包括空集合),例如给定1 2 3,
则可能的集合为:{}、{1}、{1,2}、{1,2,3}、{1,3}、{2}、{2,3}、{3}。
解法
如果不考虑字典顺序,则有个简单的方法可以产生所有的集合,思考二进位数字加法,
并注意1出现的位置,如果每个位置都对应一个数字,则由1所对应的数字所产生的就是一个集合,例如:
000 {}
001 {3}
010 {2}
011 {2,3}
100 {1}
101 {1,3}
110 {1,2}
111 {1,2,3}
了解这个方法之后,剩下的就是如何产生二进位数?有许多方法可以使用,
您可以使用unsigned型别加上&位元运算来产生,这边则是使用阵列搜寻,
首先阵列内容全为0,找第一个1,在还没找到之前将走访过的内容变为0,
而第一个找到的0则变为 1,如此重复直到所有的阵列元素都变为1为止,
说明
给定一组数字或符号,产生所有可能的集合(包括空集合),例如给定1 2 3,
则可能的集合为:{}、{1}、{1,2}、{1,2,3}、{1,3}、{2}、{2,3}、{3}。
解法
如果不考虑字典顺序,则有个简单的方法可以产生所有的集合,思考二进位数字加法,
并注意1出现的位置,如果每个位置都对应一个数字,则由1所对应的数字所产生的就是一个集合,例如:
000 {}
001 {3}
010 {2}
011 {2,3}
100 {1}
101 {1,3}
110 {1,2}
111 {1,2,3}
了解这个方法之后,剩下的就是如何产生二进位数?有许多方法可以使用,
您可以使用unsigned型别加上&位元运算来产生,这边则是使用阵列搜寻,
首先阵列内容全为0,找第一个1,在还没找到之前将走访过的内容变为0,
而第一个找到的0则变为 1,如此重复直到所有的阵列元素都变为1为止,
例如:000 => 100 => 010 => 110 => 001 => 101 => 011 => 111
#include <stdio.h>#define MAXSIZE 20int main(){int i,j,n;char digit[MAXSIZE];printf("输入集合个数:");scanf("%d",&n);for (i=0; i<n; i++){digit[i] = '0';}printf("{}");//输出空集while (1){for (i=0; i<n && digit[i] == '1'; digit[i] = '0', i++);//找到第一个0,并将前面的1置为0if (i == n){//如果全部为1,则查找结束,退出循环break;}else{//将找到的第一个0置为1digit[i] = '1';}for (i=0; i<n && digit[i] == '0'; i++);//这一句貌似没用吧,i的值已经到了第一个1的位置啊???printf("\n{%d",i+1);//打印for (j=i+1; j<n; j++){//如果后面也有值为‘1’的位置,也打印if (digit[j] == '1'){printf(",%d",j+1);}}printf("}");}printf("\n");return 0;}
- 每日一算法:可能产生的集合
- 每日一算法:产生可能的集合(一)
- 每日一算法:产生可能的集合(二)
- 每日jsp 特效(一) 产生随机的颜色
- 算法每日一练
- 关于每日一算法
- 每日算法(一)
- 每日一算法:m元素集合的n个元素子集
- 一 造成segment fault,产生core dump的可能原因
- 一 造成segment fault,产生core dump的可能原因
- 一 造成segment fault,产生core dump的可能原因
- 每日一算法:大数的阶乘
- 每日一算法:字符串的替换
- 每日一算法:二进制文件的处理
- log4j每日产生一文件配置
- 每日一算法----KMP算法
- PHP产生guid的算法一例
- 产生可能的集合(C/python)
- “上传图片到服务器”之SWFUpload的使用
- Python中类的成员函数都是虚函数
- Point &element(int index){ return points [index]; }
- 指针数组做参
- 使用TableLayout画出跨行的表格效果,附边框线
- 每日一算法:产生可能的集合(一)
- CentOS 6 下升级安装Mysql 5.5 完整步骤
- C/C++程序员 面试经历总结
- ssh -X 使用遇到的问题
- 精灵批处理类CCSpriteBatchNode
- VB鼠标滚轮插件安装错误集锦:模块与正在运行的windows版本不兼容
- 架构师 传统三层+EF+linq+MVC+wcf+Repository+easyui+ajax+jquery+json 角色权限模块路由
- Sizeof与Strlen的区别与联系
- 深入java虚拟机(五)——java本地接口JNI详解 .