一、根据身高重建队列
题目:
有一群人站队,每人通过一对整数(h, k)来描述,其中h表示人的高度,k表示在此人前面队列中身高不小于此人的总人数。
输入:
[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]
输出:
[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]
代码:
# -*- coding: utf-8 -*-# 定义身高队列
stature = [[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]
print("原始队列:")
print(stature)
# 按身高排列
for i in range(0, len(stature)-1):
for i in range(0, len(stature)-1):
if stature[i][0]< stature[i+1][0]:
term = stature[i+1]
stature[i+1] = stature[i]
stature[i] = term
print("按照身高排列的队列:")
print(stature)
output = []
for item in stature:
output.insert(item[1], item)
print("最终队列:")
print(output)
二、森林中的兔子
题目:森林中,每个兔子都有颜色。其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色。我们将这些回答放在 answers 数组里。返回森林中兔子的最少数量。
提示:
输入: answers = [1, 1, 2]
输出: 5
解释:
两只回答了 "1" 的兔子可能有相同的颜色,设为红色。
之后回答了 "2" 的兔子不会是红色,否则他们的回答会相互矛盾。
设回答了 "2" 的兔子为蓝色。
此外,森林中还应有另外 2 只蓝色兔子的回答没有包含在数组中。
因此森林中兔子的最少数量是 5: 3 只回答的和 2 只没有回答的。
输入: answers = [10, 10, 10]
输出: 11
输入: answers = []
输出: 0
代码:
# 前提是输入的answers不矛盾answers = eval(input("输入answers列表:"))
info_list = []
term = list(set(answers))
for i in term:
item_count = 0
for item in answers:
if item == i:
item_count += 1
info_list.append([i, item_count])
all_tz = 0
for info in info_list:
all_tz += info[0] + 1
print("森林中至少有兔子:" + str(all_tz))
三、两数相除
题目:
给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。
返回被除数 dividend 除以除数 divisor 得到的商。
被除数和除数均为 32 位有符号整数。
除数不为 0。
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。本题中,如果除法结果溢出,则返回 231 − 1。
提示:
输入: dividend = 10, divisor = 3
输出: 3
代码:
dividend = eval(input("输入被除数:"))divisor = eval(input("输入除数:"))
# 记录正负号
zhengfu = ""
if (dividend > 0 and divisor >0) or (dividend < 0 and divisor < 0):
zhengfu = ""
else:
zhengfu = "-"
count = 0
while(abs(dividend) >= abs(divisor)):
count += 1
dividend = abs(dividend) - abs(divisor)
print(zhengfu + str(count))
四、回文素数
求出大于或等于N的最小回问素数。
素数:因数只有1和本身
回文数:一个数从左往右读和从右往左读一样如12321
提示:
输入:8
输出:11
代码:
# 输入一个数
N = eval(input("输入一个大于0的数:"))
# 向上寻找一个满足的素数
for i in range(N, 2*100000000):
count = 0
for j in range(1, i+1):
if i % j == 0:
count += 1
# 找到素数
if count == 2:
i_str = str(i)
num = 0
# 判断满足条件的素数
for k in range(0, len(i_str)//2):
if i_str[k] == i_str[len(i_str)-1-k]:
num +=1
# 找到结果输出,停止寻找
if num == len(i_str)//2:
print(str(N) + "的最小回问素数为:" + str(i))
break