一、根據身高重建隊列
題目:
有一羣人站隊,每人通過一對整數(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