目录
判断题:
IPv4的合法地址编码共有256^4=4294967296种形式。因此如果只使用IPv4,则在互联网上最多同时接入4294967296台终端设备。
A、对
B、错
答案:
B、错
解析:
IPv4的地址编码共有2^32种形式,即约42.94亿种。因此,使用IPv4的情况下,最多可以同时接入约42.94亿台终端设备。并不是每个地址都可以用于设备连接,还需要考虑网络划分、保留地址等因素。因此,并不是所有的IPv4地址都可用于直接连接终端设备。
单选题一:
以下特征中,哪一项是计算机编码不可具备的:
A、唯一性
B、多义性
C、直观性
D、抽象性
答案:
B、多义性
解析:
计算机编码是基于确定性的规则和逻辑进行的,每个编码都具有唯一的含义。相比之下,人类语言具有多义性,一个词或短语可能有多个不同的解释或含义。计算机编码无法直接表达多义性。
单选题二:
以下哪项不是导致千年虫这个经典编码问题的原因?
A、过分强调存储效率导致的时间表示多义性
B、编码空间设计过窄
C、早年计算机的运算速度太慢
D、早年计算机的单位存储成本太高
答案:
C、早年计算机的运算速度太慢
解析:
千年虫问题(Y2K问题)是由于早期计算机在时间表示上使用了仅包含两位数的年份表示,导致在跨世纪时无法正确识别日期。问题的主要原因包括过分强调存储效率导致的时间表示多义性、编码空间设计过窄以及早年计算机的单位存储成本太高,而早期计算机的运算速度并不是导致千年虫问题的原因。
填空题:
人类和计算机在信息编码时的主要差异在于前者要求较高的易读性,而后者以()为优先。
答案:
效率
解析:
人类和计算机在信息编码时的主要差异在于前者要求较高的易读性,而后者以效率为优先。
//可阅读《计算之魂》第3章“万物皆编码——抽象与表示”-前言部分和3.1“人和计算机对信息编码的差异”一节了解相关知识。
编程题一:
最近的回文数:
回文数是一个非负整数,它的各位数字从高位到低位和从低位到高位的排列是相同的。 以下是一些回文数的例子: 0 1 33 525 7997 37273 现在给到一个数,求离它最近的一个回文数(离与它的差的绝对值最小)。如果这个数本身就是回 文数,那么就输出它本身。
答案:
def isPalindrome(num):
num_str = str(num)
return num_str == num_str[::-1]
def findNearestPalindrome(n):
if isPalindrome(n):
return n
lower = n - 1
upper = n + 1
while True:
if isPalindrome(lower):
return lower
elif isPalindrome(upper):
return upper
lower -= 1
upper += 1
n = int(input())
nearest_palindrome = findNearestPalindrome(n)
print(nearest_palindrome)
解析:
解题思路:
首先,我们可以编写一个函数`isPalindrome`来判断一个数是否为回文数。该函数将数字转换为字符串,然后检查字符串是否与其反转后的字符串相同。
接下来,我们可以使用两个指针的方法来找到离给定数最近的回文数。假设给定的数为n,我们可以从n-1开始向下搜索,同时从n+1开始向上搜索。在每一步中,我们检查当前数是否为回文数。如果是回文数,则找到了最近的回文数,直接返回;如果不是回文数,则继续向下或向上搜索,直到找到回文数为止。
最后,我们比较找到的回文数与原始数n的差的绝对值,返回差值最小的回文数。
#本代码使用python语言,首先定义了`isPalindrome`函数来检查一个数是否为回文数。然后定义了`findNearestPalindrome`函数来寻找离给定数最近的回文数。最后,根据输入的数n调用`findNearestPalindrome`函数并输出结果。
编程题二:
风险投资:
风险投资是一种感性和理性并存的投资方式,风险投资人一般会对请公允的第三方评估公司对投资对象进行评级,每个风 险投资人的风险偏好都不太一样,但是他们的投资原则都一样: 1. 把投资对象编号为1、2、3......n。 2. 对于大于或等 于自己的投资评级的投资对象,都会进行投资。 3. 除此以外,还可以从比在已投资对象中编号最小者编号更小的投资对象 和比在已投资对象中编号最大者编号更大的投资对象中各随机选一个投资对象进行投资,以对冲过分理性带来的系统性风 险。当然,也可以不选。 现在已知投资对象的总数,以及每个风险投资人的投资笔数及进行投资了的投资对象编号。 问题 是:根据以上的数据,最少需要为投资对象制定多少个不同的评级级别?(假设所有风险投资人的评级标准是一致的。)
答案:
def determineRatingLevels(n, m, investments):
rating_levels = set()
for i in range(m):
investment = investments[i]
rating_levels.add(investment[1])
for j in range(2, len(investment)):
if investment[j] not in rating_levels:
rating_levels.add(investment[j])
return len(rating_levels)
n, m = map(int, input().split())
investments = []
for _ in range(m):
investments.append(list(map(int, input().split())))
rating_levels = determineRatingLevels(n, m, investments)
print(rating_levels)
解析:
解题思路:
根据题目描述,我们需要确定投资对象的评级级别数目。每个风险投资人根据评级标准对投资对象进行评级,投资对象的编号是从1到n的连续整数。对于每个风险投资人,我们需要确定他所投资的对象的评级级别数目。
我们可以使用一个集合(Set)来记录每个风险投资人投资的对象的评级级别。对于每个投资对象,我们首先将其编号添加到集合中。然后,我们从最小的编号开始,逐个检查连续的编号是否在集合中。如果连续编号不在集合中,说明该编号之前的所有编号属于同一个评级级别。我们将当前编号添加到集合中,并将评级级别数目加1。
最后,我们统计所有风险投资人的评级级别数目,取最大值作为最终的评级级别数目。
#本代码使用python语言,首先定义了一个`determineRatingLevels`函数,该函数接受投资对象的个数n、风险投资人的个数m以及每个风险投资人的投资情况investments作为参数。函数通过遍历每个风险投资人的投资情况,使用集合记录评级级别,最后返回集合的大小,即评级级别数目。