基础算法题(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            

发布了33 篇原创文章 · 获赞 43 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qq_31967985/article/details/80990802