用C语言编写集合子集的程序怎么写?

 我来答
百度网友bcf3a4c364
推荐于2019-09-24
知道答主
回答量:10
采纳率:0%
帮助的人:4万
展开全部
首先,你的题目和举例不相符啊。题目是{ 1 ~ n },而举例是{ 0 ~ n-1};我以题目为准吧。
如果n=5;其中后面的一部分子集按顺序排是这样的:
{5}
{1 5}
{2 5}
{3 5}
{4 5}
{1 4 5}
{2 4 5}
{3 4 5}
{1 3 4 5}

{2 3 4 5}
{1 2 3 4 5}
我们可以把一个子集看成两个部分,一部分是前面的追赶者,另一部分是后面的累积者。
{1 5},{2 5},{3 5},{4 5}就像这些子集,追赶者从1一直追赶到了4,然后与累积者{5}相遇,累积者变成{4 5};追赶者从头继续从1一直追赶到了3,然后与累积者{4 5}相遇,累积者变成{3 4 5};如此反复,可以把这个全部输出来。
而累积者始终是连续的,比如{4 5}、{3 4 5}、{2 3 4 5},所以我们只用定义累积者的头和尾,就可以把累积者的范围定义。
代码如下,仅供参考:
#include <stdio.h>

void main( void )
{
int n,i,runner,start,end;
printf("请输入正整数n的值:");
scanf("%d",&n);
printf("{}\n"); //空集必定是有的
for(end=1;end<=n;end++) //累积者的尾加一,直到n
{
printf("{%d}\n",end);
for(start=end;start>0;start--) //累积者的头减一,直到1
{
for(runner=1;runner<start;runner++) //追赶者加一,直到遇到累积者的头
{
printf("{");
printf("%d ",runner); //输出追赶者
for(i=start;i<end;i++)
printf("%d ",i); //输出累积者(不包括头,因为累积者的尾后面不跟空格,而是跟})
printf("%d}\n",end); //输出累积者的尾
}
}
}
}
一个可爱的米粒
2018-05-28 · TA获得超过458个赞
知道答主
回答量:5
采纳率:100%
帮助的人:626
展开全部

如下:#include #define AMAX   6 static char A[AMAX] = {'a','b','c','d','e','f'}; void print(int len)//len为子集的大小,即元素的个数 { int i,j,k; j=k=0; for(i=0;i { if(AMAX-i for(j=0;j { printf("%c ",A[i+j]); } printf("\n"); } return; } int main() { int i; for(i=1;i=AMAX;i++) { print(i); } return 0; }

子集是一个数学概念,在c语言中的作用也非常大。

c语言是最常见的编程语言,是学习好所有编程语言的基础。

C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友bcf3a4c364
2018-01-05
知道答主
回答量:10
采纳率:0%
帮助的人:4万
展开全部
首先,你的题目和举例不相符啊。题目是{ 1 ~ n },而举例是{ 0 ~ n-1};我以题目为准吧。
如果n=5;其中后面的一部分子集按顺序排是这样的:
{5}
{1 5}
{2 5}
{3 5}
{4 5}
{1 4 5}
{2 4 5}
{3 4 5}
{1 3 4 5}

{2 3 4 5}
{1 2 3 4 5}
我们可以把一个子集看成两个部分,一部分是前面的追赶者,另一部分是后面的累积者。
{1 5},{2 5},{3 5},{4 5}就像这些子集,追赶者从1一直追赶到了4,然后与累积者{5}相遇,累积者变成{4 5};追赶者从头继续从1一直追赶到了3,然后与累积者{4 5}相遇,累积者变成{3 4 5};如此反复,可以把这个全部输出来。
而累积者始终是连续的,比如{4 5}、{3 4 5}、{2 3 4 5},所以我们只用定义累积者的头和尾,就可以把累积者的范围定义。
代码如下,仅供参考:
#include <stdio.h>

void main( void )
{
int n,i,runner,start,end;
printf("请输入正整数n的值:");
scanf("%d",&n);
printf("{}\n"); //空集必定是有的
for(end=1;end<=n;end++) //累积者的尾加一,直到n
{
printf("{%d}\n",end);
for(start=end;start>0;start--) //累积者的头减一,直到1
{
for(runner=1;runner<start;runner++) //追赶者加一,直到遇到累积者的头
{
printf("{");
printf("%d ",runner); //输出追赶者
for(i=start;i<end;i++)
printf("%d ",i); //输出累积者(不包括头,因为累积者的尾后面不跟空格,而是跟})
printf("%d}\n",end); //输出累积者的尾
}
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式