题目:集合是由大字字母(A-Z)组成的,要求输出集合的所有子集,每个子集一行,不能使用递归。

例如 “ABD”的子集:

NULL(空集)、A、B、C、AB、AC、BC、ABC(共8个)

这个题可以用位图的思想做。

比如集合{A,B} 对应位向量v=000...00011(26维)

那么A表示1,B表示2,[0,3]循环(3是B在字母表的位置2+1计算得):

0 & v = 0  输出NULL

1& v  =1 (000...0001)输出A

2&V = 2 (000...0010)输出B

3&V = 3 (000...0011)输出AB

因此,我们可以得到下面的代码:

#include <stdio.h>
#include <string.h>
#include <math.h>
#define N 26
int array[N / 32 + 1];//只用了一个int
char *p = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int maxElement(const char *s)//计算字符串最大值,例如ABDF最大为F,位于字母表第6个,输出6
{int res = s[0];for (int i = 1; s[i]; ++i){if (s[i] > res)res = s[i];}return res-'A'+1;
}
void set(int x)
{array[x >> 5] |= (1 << (x & 0x1F));
}void Initialization(const char *s)
{int i;for (i = 0; s[i]; ++i)set(s[i] - 'A');//'A'在第一位
}void subSet(const char *s, const int n)
{int i,j;int x = pow(2.0, maxElement(s));int tmp = 0;int mask = 1;Initialization(s);printf("NULL\n");for (i = 1; i < x; ++i){tmp = i & array[0];if (tmp<i)continue;mask = 1;for (j = 0; j < N;++j){if (mask & tmp)printf("%c ", p[j]);mask = mask << 1;}printf("\n");}
}int main()
{char *t = "ABDF";subSet(t, 4);return 0;
}

给定一个集合,输出它的所有子集相关推荐

  1. java中获取一个集合(Set)的子集的方法

    想获取一个链表(List)的子集,可以直接使用subList方法,但是集合(Set)并没有类似的subSet的方法. 有些应用场景需要获取一个集合的子集,这时候该怎么做呢? 最容易想到的方式,就是构造 ...

  2. C++实现输出一个集合的全部子集

    在学习C++时遇到的一个问题:用递归实现一个集合全部子集的输出. 一开始感觉好难,虽然个数和思路很好想,有n个元素,就有2n个子集,0表示没有,1表示有. 但是如何用递归代码实现呢? 思路:类似于二进 ...

  3. 输出一个集合的所有子集

    输出字符串的所有子集 如:对"abc" 输出:  c b bc a ac ab abc 第一种做法: 2^n 遍历每个字符,每个字符只能取或者不取.取就把该字符加入结果中,遍历完毕 ...

  4. 698. 划分为k个相等的子集:给定一个整数数组 nums 和一个正整数 k,找出是否有可能把这个数组分成 k 个非空子集,其总和都相等。

    题目描述 给定一个整数数组 nums 和一个正整数 k,找出是否有可能把这个数组分成 k 个非空子集,其总和都相等. 示例 1: 输入: nums = [4, 3, 2, 3, 5, 2, 1], k ...

  5. java set子集_Java程序来检查一个集合是否是另一个集合的子集

    Java程序来检查一个集合是否是另一个集合的子集 在这个实例中,我们将学习Java中检查一个集合是否是另一个集合的子集. 要理解此示例,您应该了解以下Java编程主题: 示例1:使用HashSet类检 ...

  6. 求一个集合的所有子集问题实现

    **问题描述 已知N个大于0的整数构成一个集合,即{1,2,3,--,N},求其所有的非空且元素不相邻的子集,计算所有子集的乘积的平方的和. 例如:集合{1,2,3,4},其所有非空不相邻子集有{1} ...

  7. 求一个集合的所有子集问题

    一个包含n个元素的集合,求它的所有子集.比如集合A= {1,2,3}, 它的所有子集是: { {1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3}, @}(@表示空集 ...

  8. 给定一个正整数n, 输出1到n的所有排列 如输入 3 输出 123, 132, 213, 231, 312, 321 (Java实现)

    package com.yijie.practice;import java.util.HashSet; import java.util.Scanner; import java.util.Set; ...

  9. 给定一个字符串,输出第一次出现k次的字母java,c++实现

    题目: 给定一个字符串,输出第一次出现k次的字母. 示例:    输入:abbcdaabgb               3    输出:a 输入:aaabbb               3     ...

最新文章

  1. 视+AR获近亿元A+轮融资,汽车之家领投
  2. bezier曲线_Bezier算法
  3. 某些列满足某些条件就被改是什么值,不满足就被改为另外的一些值(python pandas)
  4. 20145104张家明实验五
  5. ubuntu 16.04安装nVidia显卡驱动和cuda/cudnn踩坑过程
  6. 记忆化搜索 递归缓存_需要微缓存吗? 营救记忆
  7. graphpad细胞增殖曲线_肿瘤干细胞?居然被这两个新加坡人轻松干掉了?
  8. ETL增量单表同步简述_根据dateTime增量
  9. 深入浅出 CAS,很多想进阿里的倒在了这个知识点
  10. 2021年全国大学生电子设计大赛题目
  11. OpenSesame for Mac(ae项目格式编辑插件)
  12. TCP-面向连接的、可靠的、基于字节流的 传输层通信协议
  13. cocos 躲避球游戏(1) --创建项目和场景切换
  14. 去中心化市场OpenBazaar如何运转
  15. 随机搜索(Random Searching)算法
  16. 申论范文:共同富裕“一定”会考的点
  17. 华为设备配置IS-IS命令
  18. 科沃斯扫地机器人拆解_哈士奇拆给你看 篇二:科沃斯T5 Power扫地机器人,首拆!...
  19. 北方民族大学计算机考研资料汇总
  20. 阿里2018博士生校招启动—博出位!

热门文章

  1. java se7 变化_Java SE7新特性之二进制字面量
  2. 基于JSP的物业管理系统
  3. 使用cad制作标定板(解决cad出图尺寸与实际不符问题)
  4. XC6VLX240T-1FFG1156小知识
  5. 下三角矩阵线性方程的求解
  6. CFA一级学习笔记--权益(五)--行为金融学
  7. 机器人“马杀鸡”来了,总感觉哪里怪怪的。。。
  8. 21种常见大数据可视化图表
  9. jquery控制页面只刷新一次
  10. java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类