- 给定长度为m的非重复数组p,以及从其中取n(n<m)个数字组成新的子数组q。现要对p进行排序,要求:q在数组的最前方,其余数字按从小到大的顺序依次排在后面
输入样例:
q = [3, 5, 4]
p = [5, 4, 3, 2, 1]
输出样例:
3 5 4 1 2
代码如下:
q = [3, 5, 4]
p = [5, 4, 3, 2, 1]
# 对 p 中的数字进行排序
sorted_p = sorted(p)
# 创建一个空的列表(数组)result
result = []
# 先把q中的数字依次放入result
for ele in q:
result.append(ele)
# 遍历一下排好序的p,也即sorted_p, 将sorted_p 中不在q中的元素依次放到result
for num in sorted_p:
if num not in q:
result.append(num)
# 最后,输出结果
print(result)
运行结果:
2、
- 给定小写英文字符串a和一个非负数b(0<=b<26), 将a中的每个小写字符替换成字母表中比它大b的字母。这里将字母表的z和a相连,如果超过了z就回到了a。
输入样例:
a = "dfjkldfdfdl"
b = 5
输出示例:
ikopqikikiq
代码如下:
a = "dfjkldfdfdl"
b = 5
# 定义一个空的字符串,用于保存结果
result = ""
# 遍历a中的每个字符,并对其加5
for letter in a:
# 计算出字母表中比letter大b(这里是5)的字符
# 首先我们要得到 ascii码(使用ord函数)
letter_new_code = (ord(letter) - ord('a') + b) % 26 + ord('a')
# 然后我们将 ascii 码转为字母(使用chr函数)
letter_new = chr(letter_new_code)
result += letter_new
# 打印结果
print(result)
运行结果:
3. 给定整数a,计算a在二进制表示下1的个数,并输出。
输入样例:
a = 39
输出样例:
4
代码如下:
a = 39
# 定义一个计数器,来统计1的个数
counter = 0
# 遍历 a 的二进制表示中的每一位
for i in range(128):
# 使用位运算符 & 来监测第i位是否为1
if a & (1 << i) != 0:
# 说明第i位上a有1, 那么计数器加1
counter += 1
# 输出结果
print(counter)
运行结果:
4. 克拉兹猜想:任取一正整数(大于2),如果是偶数,将其除以2。如果是奇数,将其乘以3再加1,然后重复这个过程,最后结果都会陷入4 2 1 的循环。
请通过编程实现,当4,2,1重复第二次的时候,结束循环,并打印整数为16时的输出列表。(编写完程序后,讲数值未16的后续打印出来)
输入样例:
a = 19
输出样例:
19, 58, 29, 88, 44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1, 4, 2, 1
代码如下:
# 定义一个克拉兹猜想(数学家杀手)的函数
def collaz_conjecture(a):
# 定义一个输出的列表,来保存“线路”
result = []
while True:
# 如果是偶数: 除以2
if a % 2 == 0:
a = a // 2
# 如果是奇数: 乘3再加1
else:
a = 3