基礎算法題(python)——根據身高重建隊列,森林中的兔子,兩數相除,迴文素數

一、根據身高重建隊列

題目:
有一羣人站隊,每人通過一對整數(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            

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章