求用C语言编写求集合子集的程序

求用C语言编写求集合子集的程序,第1张

首先,你的题目和举例不相符啊。题目是{ 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=1end<=nend++) //累积者的尾加一,直到n

{

printf("{%d}\n",end)

for(start=endstart>0start--) //累积者的头减一,直到1

{

for(runner=1runner<startrunner++) //追赶者加一,直到遇到累积者的头

{

printf("{")

printf("%d ",runner) //输出追赶者

for(i=starti<endi++)

printf("%d ",i) //输出累积者(不包括头,因为累积者的尾后面不跟空格,而是跟})

printf("%d}\n",end) //输出累积者的尾

}

}

}

}

一、 标准箱号构成基本概念:采用ISO6346(1995)标准。

标准集装箱箱号由11位编码组成,包括三个部分:

1、 第一部分由4位英文字母组成。前三位代码 (Owner Code) 主要说明箱主、经营人,第四位代码说明集装箱的类型。列如CBHU 开头的标准集装箱是表明箱主和经营人为中远集运。

2、 第二部分由6位数字组成。是箱体注册码(Registration Code), 用于一个集装箱箱体持有的唯一标识。

3、 第三部分为校验码(Check Digit)由前4位字母和6位数字经过校验规则运算得到,用于识别在校验时是否发生错误。即第11位数字。

根据校验规则箱号的每个字母和数字都有一个运算的对应值。箱号的前10位字母和数字的对应值从0到Z对应数值为0到38,11、22、33不能对11取模数,所以要除去。

2、第N位的箱号对应值再分别乘以2N-1 (N=1,2,3………..10)

例如:箱号为CBHU3202732的集装箱它的第1位代码为C,

它的代码值=代码的对应值×21-1 =13×1=13。

类推第2位代码为B

它的代码值=代码的对应值×22-1 =12×2=24

以此类推得到箱号前10位代码的代码值。

将前10位的代码值乘积累加后对11取模

箱号为CBHU3202732的集装箱前10位箱号的代码累加值=4061,取11的模后为2,就是这个箱号第11位的识别码的数值。

以此类推,就能得到校验码


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8151651.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存