北航计算机组成原理课程设计-2020秋 PreProject-入门测试

北航计算机学院-计算机组成原理课程设计-2020秋

PreProject-入门测试


本系列所有博客,知识讲解、习题以及答案均由北航计算机学院计算机组成原理课程组创作,解析部分由笔者创作,如有侵权联系删除。


计小组传信息

计小组暑假闲来无聊,找到了手中的5个各不相同的硬币,每个硬币只存在正面放置和反面放置两种情况,不能依靠侧面竖立。这五个硬币大小各不相同,计小组的强迫症让他只能由小到大对硬币进行排放(即五个硬币的码放顺序必须固定)。计小组想通过这五个硬币的放置情况编写一张密码表来和朋友传递信息。请问计小组最多可以传递多少种不同的信息呢?

用二进制表示:例如0b1010,0b0101010,不需要写前置0。

答案:0b100000

用十进制表示:

答案:32

五枚硬币摆放位置是固定的,而每枚硬币只有正反两个状态,那么根据乘法原理一共自然是25=32个状态。


计小组的求助

计小组暑假学习不同的进制,他将一个十进制数字数字转换为二进制、八进制、十六进制,并非常恶趣味的点了几滴墨水上去,假装来求助你,请你把污渍的地方进行填补。

二进制: 1_01**_0000_1110_****_****

八进制: *00*33*

十六进制:*4*e*8

请用十六进制将答案表示出来:

答案格式:请直接输入数字,例如1b即可。注意需要小写。

答案:140ed8

二进制、八进制、十六进制表示了同一个数,不同位置有空缺,只需要将他们全部转化为二进制,相互对比补上空缺即可。需要注意技巧:八进制每个位可以直接展开为三个二进制位,十六进制每个位可以直接展开为四个二进制位。

二进制:1_01**_0000_1110_****_****

八进制:***_000_000_***_011_011_*** (每四位一分隔,写成:*_**00_0000_***0_1101_1***)

十六进制:****_0100_****_1110_****_1000

通过对比,互通有无,容易发现原数写成二进制应该是:1_0100_0000_1110_1101_1000,写成十六进制应该是0x140ed8


计小组学习补码、反码以及原码

计小组被拒绝后决定要好好学习,学习了补码和反码以及原码的转换。

十进制: -113

原码:

答案格式:请用8位表示,每四位用_分割,1111_1111,下同):

答案:1111_0001

反码:

答案:1000_1110

补码:

答案:1000_1111

有符号数的表示中,最前面的一位代表符号位,0为正,1为负。原码的符号位不变,其余所有位取反得到反码。反码再加1得到补码。


计小组学习有符号补码

补码为:1011_0101

十进制有符号表示,例如-10:

答案:-75

八进制有符号表示,例如-14:

答案:-113

十六进制有符号表示,例如-3a:

答案:-4b

牢记补码的性质:对补码再取补码即得到原码。因此从有符号补码可以得到原码为:1100_1011,从而将其转换为十进制、八进制和十六进制即可。


粮食征收

在遥远的康皮特王国,国王召见了聪明而又伶俐的计小组,来帮他解决一个有关粮食称重的问题
在康君一世12年的秋收中,国王派税务大臣前往农村收粮食,按照农民人头和土地数量的不同,需要征收1-256千克粮食(征收的数额必须为整数千克,即不能征收类似25.5kg)。为了准确的称量出粮食的重量,每个税务大臣都携带着一个天平和若干砝码,砝码的质量为整数千克

在称重的时候,大臣们可以将手中的砝码放在左端,将粮食放在右端,从而得出粮食的重量。例如:一位大臣手里有3kg,5kg,8kg三个砝码,那么他就可以称量出3,5,8,3+8=11,5+8=13,3+5+8=16等重量的粮食

为了称量出从1到256的每1千克,大臣们要携带很多砝码,一个最简单的策略是,每个大臣都携带256枚砝码,分别重1,2,…,256千克。但是这样会对国库的铁存量造成很大的浪费。

现在国王希望知道,每个大臣最少携带几枚砝码,就可以完成称量1-256的任务?计小组面对这个问题感到很困难,所以她向同学们求助

完成称量1-256的任务至少需要多少枚砝码?请填入一个正整数,不要有多余的字符

答案:9

后来大臣们突然想到,不一定只在左端放砝码,右端放粮食。砝码在左右端都可以放。如果大臣携带了3kg和5kg两枚砝码,这他不光可以继续称量出3,5,3+5=8这三种重量,还可以称量出5-3=2kg的重量。采用两边放砝码的方式,大臣们觉得可以减少携带的砝码数量

同样完成称量1-256的任务,在两端都可以放砝码时,至少需要多少枚砝码?请填入一个正整数,不要有多余的字符

答案:6

对于第一种情况,只能在天平左边放砝码,问题被抽象为:有一列数,在其中任意选取一些数相加,其结果可以等于1-256之间的所有数,求这一列数的最小个数。

对于这一问题,题目中已经给出了例子:最简单的策略,这一列数就是1, 2, 3, …, 256,一共256个,想要表示1-256范围内的任意数都可以直接拿出一个数。题目提到,这样的方法显然造成了数的浪费,但是我们需要思考,“砝码的浪费”本质是什么?从以下的角度考虑:例如我们想要表示100这个数,按照上述最简单的方法,我们可以选择100 = 100,但同时还可以选择100 = 1 + 99, 100 = 2 + 98, …,换言之,如果我们发现一种重量可以由多个砝码组合表示,那就意味着必然有砝码的浪费。基于这样的考虑,如果我们能找到一列数,它在求和表示1-256所有数的过程中,对每一个数都有唯一的表示方法,那么这一列数必然是个数最少的(因为如果个数更少,就必然有一些数无法被表示)。再换言之,这些砝码中任意不同的两个组合,其重量之和必然是不同的(因为一旦有相同的,就说明一个重量可以被两种砝码组合表示,也就造成了砝码的浪费)。

有了上述分析,我们似乎找到了一个更明确的目标。下面假设我们选取了n个砝码,重量分别是a1, a2, a3, …, an,如果这些砝码已经满足了:任意两个不同的组合,其重量之和必然不同,那么这n个砝码一共可以表示多少个重量呢?我们在选取砝码求和的过程中,对于每一个砝码而言,都有选或不选两种可能,那么n个砝码一共可以创造2n种组合(包含了一个砝码都不选的0组合),而如果每个砝码组合的重量和都不同,n个砝码就可以表示2n个不同的重量(包含了0重量),而如果不计算0重量,n个砝码最多可以表示(2n-1)个不同重量。依据题目,我们需要表示1-256,一共256个不同的重量,则有2n-1 > 256,n ≥ 9。我们至少需要9个砝码来表示1-256范围内所有的重量。

对于第二种情况,一列数在选取一些数相加的基础上,还可以相减。现在我们从一堆砝码中选取的砝码组合,本身就可以表示多个重量:砝码组合中的砝码可以摆放在天平左边,也可以摆放在天平右边。使用和刚才相同的分析思路,我们的目标变成:这些砝码和其摆放位置任意不同的两个组合,其表示的重量必然不同。例如砝码1, 3, 5就不满足上述要求,因为4这个重量既可以由1+3表示,也可以由5-1表示,这造成了砝码的浪费。

还是假设我们选取了n个砝码,重量分别是a1, a2, a3, …, an,如果这些砝码已经满足了:这些砝码和其摆放位置任意不同的两个组合,其表示的重量必然不同,那么这n个砝码一共可以表示多少个重量呢?这一次,选取砝码表示重量的时候,对每一个砝码而言,它都有放在左边、放在右边、不放三种选择(即取正、取负、不选取三种选择),那么n个砝码一共可以创造3n个不同的摆放位置组合(包含了不放任何砝码的0组合),如果不计0重量,则可以表示(3n-1)个不同重量。但要注意的是,这些重量包含了负数,并且负数和正数的情况一一对应(例如左边放砝码5,右边放砝码3,称出重量2;而左边放砝码3,右边放砝码5,同样称出重量2,这是两种不同的砝码和位置组合,实质上称出的重量分别是2和-2)。因此这(3n-1)个重量排除负数重复,应当只有(3n-1)/2个不同重量。依据题目,我们需要表示1-256,一共256个不同的重量,则有(3n-1) / 2 > 256,n ≥ 6。我们至少需要6个砝码来表示1-256范围内所有的重量。

上面两段分析已经给出了本题的答案,不过还有一个问题没有解决:“任意两个不同的组合,其重量之和必然不同”,以及“砝码和其摆放位置任意不同的两个组合,其表示的重量必然不同”,这两个前提能否满足呢?换言之,我们只推断出了砝码数量的最小值,那是否有对应数量的砝码能够真正满足呢?答案是肯定的。对于只能放在天平左边的情况,我们选取2的幂重量的一列砝码:1, 2, 4, 8, 16, 32, 64, 128, 256,就可以表示1-256范围内的所有数,而且表示方法是唯一的。对于可以放在左边也可以放在右边的情况,我们选取3的幂重量的一列砝码:1, 3, 9, 27, 81, 243,就可以表示1-256范围内的所有数,而且表示方法是唯一的。

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值