离散数学 8.1.2子集(C语言)

【头歌educoder】离散数学实训参考-第一章-集合 python搭建自然数系统--头歌离散数学 阅读详情

[问题描述]

给定一个集合A,求A的所有非空子集。例如A={a,b}时,则它的所有非空子集为{a},{b},{a,b}。集合A不空,并且A的元素个数不超过10个。

[输入]

有多组测试数据,每组测试数据为一行。
每行表示一个集合,集合由一对大括号括起来,集合之间的元素用一个逗号隔开。之间没有任何的空白字符。已经知道集合元素按字典顺序排列。

[输出]

每组测试数据输出为2^n-1行,每行表示一个非空子集。子集与子集的顺序参考输出样列。(对应的二进制由小到大)
每个子集的元素按字典顺序排列,元素之间用逗号隔开,没有任何的空白字符。子集由一对大括号括起来。

 

[输入样列]

{a,b,c}

[输出样例]

{a}
{b}
{a,b}
{c}
{a,c}
{b,c}
{a,b,c}

解题思路:

一开始思路不正确,换了两次思路,写到最后都发现太复杂 ,最后想到了这个方法,耗时将近两个小时:

我发现输出样例很像二进制编码

假设{a}是10000

{b}可以看成是10000+1=01000(从左往右进位,这样方便数组累加)

{a,b}就是01000+1=11000

{c}就是11000+1=00100(也就是说这个二进制数第一位对应a,如果该位是1的话,就要输出a,第二位对应b,以此类推)

这串二进制数最长是26位,对应26个字母

 

代码如下: 

 

#include<stdio.h>
#include<string.h>
int main(){
	char ch[27]; 
	char ch1[81];
	int i,j,k,s,flag;
	gets(ch1);
	s=0;
	for(i=0;ch1[i]!='\0';i++){//把字母单独提取出来,存进ch数组中 
		if(ch1[i]>='a'&&ch1[i]<='z'){
			ch[s]=ch1[i];
			s++;
		}
	}
	ch[s]='\0';
	int sum=1;
	for(i=0;i<strlen(ch);i++){//计算一共要输出几行 
		sum*=2;
	}
	sum--;
	int n=0;
	ch[s]='\0';
	int cnt[26]={0};//二进制编码串 
	while(1){
		cnt[0]++;
		n++;
		if(n>sum){
			break;
		}
		for(i=0;i<26;i++){//按照二进制的规则进位 
			if(cnt[i]>=2){
				cnt[i]=0;
				cnt[i+1]++;
			}
		}
		printf("{");//把每次进位的结果对应ch数组输出 
		flag=1;
		for(i=0;i<strlen(ch);i++){
			if(cnt[i]){
				if(flag){
					flag=0;
					printf("%c",ch[i]);
				}
				else{
					printf(",%c",ch[i]);
				}
			}
		}
		printf("}\n");
		
	}
	return 0;
}

 

离散数学:数学语言与证明方法(练习题) 离散数学数学语言与证明方法的相关练习题 阅读详情

相关推荐

【梳理】离散数学 第6章 集合代数 6.1 集合 6.2 集合的运算

教材:《离散数学》第2版 屈婉玲 耿素云 张立昂 高等教育出版社 源文档高清截图在最后 第6章 集合代数 6.1 集合 1、集合是不能精确定义的基本概念。直观来讲,把一些事物汇集到一起组成整体就叫集合。这些事物称为集合的元素或成员。例如:平面上的所有点的集合;26个英文字母的集合;自然数集N、整数集Z、有理数集Q、实数集R、复数集C等。 表示集合的方法有列元素法,如:A = {a,b,c} 以及谓...

COFACTOR 3130

列出一个集合的所有非空子集

整体思路 description: 我们先看一个例子 A={a, b ,c ,d} 非空子集有 {a}      |-->{a, b ,c }-->{a, b ,c ,d} {a, b}-->|      |-->{a, b ,d}   {a, c}-->{a, c ,d} {a, d} {b}      {b, c}-->{b ,c ,d} {b, d}

三月软件工作室--任忌 5230

离散数学之集合论(上)

离散数学之集合论 文章目录离散数学之集合论使用的书籍写作的目的集合概念集合的基本性质集合的表示枚举法叙述法归纳法递归指定集合法文氏图解法集合和元素的关系集合与集合的关系几个特殊的集合 使用的书籍 《离散数学及其应用》(第3版)傅彦等编著。 写作的目的 为了记录学习离散数学的过程。写下自己理解的离散数学,就是为了边学习边记录就比较有意思。个人水平有限,文章中有错误的地方,大家可以指出来。然后我主要写的也是我理解的,课本上的带一下就行,如果把课本上的也写下来,那你还不如直接看课本。 集合 英文单词是se

Cukor丘克的博客 1536

求集合元素的所有非空子集

现有一个包含N个元素的集合S,求集合S的所有非空子集? 例如:集合S包含三个元素{a, b, c},则它的所有非空子集为: {a}, {b}, {c}, {a, b}, {a, c}, {b, c} 和{a, b, c}。 这里先用位操作的思路来求解,具体方法:用2进制Bit位来标记集合中的某个元素是否被选中,1代表选中,0代表未选中。例如集合{a, b, c}的所有子集可如下表示: {

marho 7548

自考《离散数学》题型总结

自考《离散数学》题型总结

ww981580010的博客 4862

离散数学与算法基础练习题合集

本文整理了涵盖集合运算、命题逻辑、关系推理、算法设计与分析、数学归纳法证明等多个离散数学核心主题的练习题,包含详细解答。内容涉及逻辑表达式转换、递归算法实现、时间复杂度分析、递推公式求解以及数学证明方法等,适用于计算机科学基础学习与复习。

3a9bq4r8t2y的博客 1146

教你如何求一个集合的所有非空子集的方差和

/题目: 注:要求提交程序源代码和执行结果,编程语言不限。 1.对于一个大小为n的数集,求出该数集的每个"非空子集"的方差之和对10°+7取模的结果。 附件1说明:第一行一个正整数口表示集合大小,第二行几个整数表示集合中的元素。/ /求集合的所有子集的算法(1): 对于任意集合A,元素个数为n(空集n=0),其所有子集的个数为2^n个 如集合A={a,b,c},其子集个数为8;对于任意一个元素,在每个子集中, 要么存在,要么不存在,对应关系是: a->1或a->0 b->1或b->0

qq_45707166的博客 1620

离散数学知识汇总

{1,2,3,4,5,6,7,8}中, 只对第 1 个元素是第 2 个元素的因数的序偶感兴趣,即只对R={,,,,,, ,, ,, , , ,,,,,A(x)∨﹁A(x),∀xA(x) ∨﹁∀ xA(x)可看成 p ∨﹁ p 的代换实例,A(x) ∧﹁A(x),∀xA(x) ∧﹁ ∀x A(x)可看成 p ∧﹁ p 的代换实例。

qq_67692062的博客 1484

离散数学拾趣(三):集合的子集有多少个

集合广泛应用于计数问题,这类问题需要讨论集合的大小。 令S为集合。若S中恰有n个不同的元素,n是非负整数,就说S是有限集合,而n是S的基数,用|S|表示。若S={ 1, 2, 3 },则|S| = 3。 有时候需要考虑一个集合的元素所有可能的组合,看它们是否具有某种性质。为此构造一个新的集合,它以S的所有子集作为它的元素,该集合称为S的幂集合,记为P(S)。 比如: 本文的主题也就是:对于...

weixin_33961829的博客 798

离散数学高教版习题解答精要

集合是数学中的一个基本概念,由不同元素组成的整体,这些元素可以是任何事物,包括数字、人物、文字或其他集合。集合中的元素必须是明确区分的,即对于任一对象,该对象要么属于该集合,要么不属于该集合,不存在模棱两可的情况。集合通常用大写字母表示,如集合A、B、C等,而集合中的元素则用小写字母表示。如果x是集合A的一个元素,我们用符号 (x \in A) 表示;如果x不是集合A的元素,则用符号 (x \notin A) 表示。

weixin_30923011的博客 1147

【ISP图像处理】Demosaic去马赛克技术演进与边缘优化策略

本文深入解析了ISP图像处理中的Demosaic(去马赛克)技术。从Bayer阵列原理出发,梳理了从双线性插值、Hamilton-Adams边缘导向算法到利用通道相关性与自相似性的技术演进历程,并重点探讨了针对边缘与纹理伪影的优化策略,为工程实践中的算法选型与硬件协同设计提供了专业指导。

weixin_29091445的博客 388

【离散数学】1.2特殊集合与集合间关系

空集定义不含任何元素的集合叫做空集(empty set),记作∅\emptyset 空集可以符号化为∅={x|x≠x}\emptyset=\{x|x\not=x\}举例 设A={x|x∈R,x2<0}A=\{x|x\in R, x^2<0\},则A=∅A=\emptyset |∅|=0,|{∅}|=1|\emptyset|=0, |\{\emptyset\}|=1 空集是绝对唯一的 全集定义针对

中央单元 5935

手把手调试Android 14 ShellTransitions:用Log追踪ActiveTransition与Handler匹配过程

本文详细介绍了在Android 14中调试ShellTransitions机制的方法,重点通过Log追踪ActiveTransition与Handler的匹配过程。文章提供了关键日志点植入策略、Handler匹配机制解析及实战调试案例,帮助开发者解决窗口转场动画中的卡顿和错乱问题,提升系统动画性能。

weixin_42652674的博客 429

总结 离散数学知识点

总结  离散数学知识点 第二章  命题逻辑 1.→,前键为真,后键为假才为假;—>,相同为真,不同为假; 2.主析取范式:极小项(m)之和;主合取范式:极大项(M)之积; 3.求极小项时,命题变元的肯定为1,否定为0,求极大项时相反; 4.求极大极小项时,每个变元或变元的否定只能出现一次,求极小项时变元不够合取真,求极大项时变元不够析取假; 5.求范式时,为保证编码不错,命题变元最好按

icepointLine的专栏 4万+

解释多智能体强化学习(Multi-Agent Reinforcement Learning)(面试题200合集,中频、重要)

多智能体强化学习通过扩展传统强化学习框架,研究多个智能体在动态、交互环境中的策略优化问题。它既有理论上的挑战(如非平稳性和均衡求解),也有广泛的实际应用前景。数学上,它依赖马尔可夫博弈模型,核心是设计算法让智能体在合作或竞争中达到最优。

qq_38334677的博客 990

AUTOSAR-WdgM篇

Wdg通常有两种:一种是芯片内部自带的片内看门狗,另一种是在芯片外部通过SPI这种接口连接的片外看门狗。MCAL只负责常用的有MCU内部看门狗,片内看门狗的特点是Wdg模块是直接访问相关硬件寄存器。内部看门狗依赖于系统时钟片外看门狗属于设备抽象层负责,通常需要使用MCAL提供的其他模块(比如SPI,DIO,PWM等)来访问/控制外扩看门狗芯片。这种不能直接访问硬件寄存器。Wdg Driver:有三种模式slow mode,fast mode ,off mode。

qq_329563867的博客 5830

离散路的数目的c语言编程实验,离散数学集运算C或C语言实验报告

离散数学课程研究报告: 12年级计算机班1年级: 鲍家zhen: 201212201401016实验结果: 1.【实验主题】命题逻辑实验4 2. [实验目的]掌握用计算机计算集合的交,并,差和补运算的方法. 3. [实验内容]编程实现集合的交,并,差和补运算. 4. [实验要求]表示一个集合. 假设A = {1,3,4,5,6,7,9,10},B = {2,3,4,7,8,10},输入数组A...

weixin_39820588的博客 389

嵌入式开发环境Vscode开发STM32单片机程序

STM32单片机非常强大,大多数教程都是使用 keil 编译器,keil 是收费的而 gcc 是开源免费的。这里介绍一些使用 gcc +开发单片机程序的经验。(这里不解释 gcc 是什么)。

嵌入式技术开发 1843

离散数学期末考试必考知识点

3、集合的子集关系与属于关系必考。 需要注意的是,对于任意一个集合来说,他的空集属于他的真子集,而不是属于关系; 集合里面叠加集合处理方法抽丝剥茧即可,逻辑简单; 集合可能与幂集结合起来,了解幂集的写法:

henu_GM的博客 8803

化工设计软件:PDMS二次开发_(7).数据导入与导出技术

在某些复杂场景下,PDMS提供的标准API接口可能无法满足需求。此时,可以通过自定义API接口来实现特定的数据导入与导出功能。自定义设备导入API接口可以处理更复杂的设备数据格式。# 导入必要的库import pdms_api # 假设有一个PDMS API库# 定义自定义设备数据# 自定义设备导入API接口# 调用自定义设备导入API接口# 输出导入成功的消息print("自定义设备数据导入成功")在PDMS二次开发中,数据的导入与导出是关键的技术环节。

kkchenjj的博客 1486

基于Qt C++开发一款国产化的福昕风格PDF编辑工具

QString text = QInputDialog::getText(this, "文本批注", "输入批注内容:", QLineEdit::Normal, "", &ok);QString savePath = QFileDialog::getSaveFileName(this, "保存加密PDF", "", "PDF文件 (*.pdf)");QAction* zoomInAct = new QAction(QIcon::fromTheme("zoom-in"), "放大", this);

寒寒豆豆软件公司的博客 237

离散数学实验——求幂集

简单的一个离散数学小实验,希望对你有帮助。

Sdom_L的博客 1052

【Autosar从入门到精通到进阶实战篇】75 0x34/0x36/0x37:请求下载、传输数据、请求退出——刷写流程的“三兄弟”

文章摘要:UDS刷写流程0x34/0x36/0x37关键实现要点 本文通过一个真实ECU变砖案例,揭示了UDS刷写服务(0x34请求下载、0x36传输数据、0x37请求退出)的实现陷阱与最佳实践。核心要点: 安全架构设计: 0x34阶段只协商参数,不立即擦除Flash 采用缓冲区暂存数据,避免频繁写Flash 严格检查地址对齐和内存边界 关键改进措施: 实现数据包序列号校验(防错位) 传输层缓冲区溢出保护 0x37阶段必须包含完整性校验(如CRC32) 一次性批量写入Flash,减少擦写次数 典型错误模式:

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 71

离散数学第一章(知识点总结)

提前用电子科大的视频预习了下离散数学,感觉知识点很杂,总结了下发到上面~有需要的自取 如果有需要电子版的可以评论哈 1.集合的数学符号: 用带或不带下标的大写英文字母表示集合:A,B,C,... 用带或不带下标的小写英文字母表示元素:a,b,c,.... 2.常用集合 自然数集合N 整数集合Z 有理数集合Q(有理数是整数(正整数、0、负整数)和分数的统称) 实数集合R(有理数和无理数的总称) 3.属于关系 a是集合A中的元素:a∈A a不是集合A中的元素:a∉A 4.表示方法 ..

Joyce_Huuuuu的博客 2848

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

离散考试题计算机,离散数学试题及答案_离散数学试题库_离散数学试卷及答案...

离散数学试题及答案一、填空 20% (每小题2分)1、 P:你努力,Q:你失败。“除非你努力,否则你将失败”的翻译为“虽然你努力了,但还是失败了”的翻译为。2、论域D={1,2},指定谓词P则公式?x?yP(y,x)真值为。2、 设S={a1 ,a2 ,?,a8},Bi是S的子集,则由B31所表达的子集是。3、 设A={2,3,4,5,6}上的二元关系R?{?x,y?|x?y?x是质数},则R=(...

weixin_35683330的博客 1593

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

离散数学考前攻略

第三章 集合与关系 集合的概念:把具有相同性质的不同对象的全体称为集合。 集合的特性:互异性,无序性 集合间的关系:包含,相等, 全集,空集 幂集:有一个集合所有子集构成的集合 真子集个数为2^n-1个 第二题有2个元,即有2^2个子集 集合的运算 交,并,补,对称差 补集A-B,就是把A中属于B的部分挖去。 对称差,就是把A和B的交集挖去剩下的集合 tips 序偶 概念:具有固定次序的客体ab组成的有序序列, 次序不同序偶也是不同的 笛卡尔积,两个集合中的元素分别作为序偶的第

qq_45845771的博客 5013

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

上一篇: 离散数学 8.1.3 A-B(C语言)
下一篇: C语言:离散数学8.1.8 Fibonacci数列
阳青
博客等级 码龄7年 51粉丝 61原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值