python基本算法題(一)


1、3位水仙花數計算

"3位水仙花數”是指一個三位整數,其各位數字的3次方和等於該數本身。

例如:

ABC是一個“3位水仙花數”,則:A的3次方+B的3次方+C的3次方 = ABC。

使用Python,輸出所有的3位水仙花數。

>>> for i in range(100,1000):
    if pow(i // 100 , 3) + pow(i % 10 , 3) + pow(i // 10 % 10, 3) == i:
           print(i,end=" ") 

 >>> 153 370 371 407
     Process finished with exit code 0

水仙花數是指一個 3 位數,它的每個位上的數字的 3次冪之和等於它本身(例如:1^3 + 5^3+ 3^3 = 153)。與水仙花數類似

同樣的,與水仙花數相似,回文數的判斷方法也是采取相應的方式

2、回文數的判斷

“回文”是指正讀反讀都能讀通的句子。在數學中也有這樣一類數字有這樣的特征,稱為回文數,例如121,25852等等

n=input("請輸入一個數字:")
if n == n[::-1]:
    print("你輸入的數字是回文數")
else:
    print("你輸入的數字不是回文數")

這里是根據回文數的特性:回文數和本身顛倒的數相等,來進行判斷的

3、使用Python判斷是否為閏年

判斷任意年份是否為閏年,需要滿足以下條件中的任意一個:
  ① 該年份能被 4 整除同時不能被 100 整除;
  ② 該年份能被400整除。

由於滿足閏年的條件互相有關聯,所以可以使用條件語句來實現,判斷輸入的年份是否為閏年

def leap(a):
    if a % 4 == 0:
        if a % 400 == 0:
            return True
        elif a % 100 == 0:
            return False
        else:
            return True
    else:
        return False


n = int(input())
if leap(n) == True:
    print("{}年是閏年".format(n))
else:
    print("{}年不是閏年".format(n))

4、快樂的數字

首先是一個快樂的數字的定義:

快樂的數字按照如下方式確定:從一個正整數開始,用其每位數的平方之和取代該數,並重復這個過程,直到最后數字要么收斂等於1且一直等於1,要么將無休止地循環下去且最終不會收斂等於1。能夠最終收斂等於1的數就是快樂的數字。使用Python編寫一個算法來確定一個數字是否“快樂”

例如數字 19 就是一個快樂的數字,計算過程如下:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

  12 + 92 = 82

  82 + 22 = 68

  62 + 82 = 100

  12 + 02 + 02 = 1   (最終收斂為1)

這里經過了分析,得出了,當循環到數字4時,那么這個數字一定不是快樂數,所以可以得出條件。設置一個循環,當循環到1(快樂數)或者4(不是快樂數)時,就終止循環,得出結果是否為快樂數

def getSumofSquares(num): #快樂數判斷
    numStr=str(num)
    sum=0
    for i in numStr:
        sum += int(i)**2
    return sum


n = input() 
sumofSqrs = eval(n)
while sumofSqrs != 1 and sumofSqrs != 4: 
    sumofSqrs = getSumofSquares(sumofSqrs)
else:
    if sumofSqrs == 1:
        print("True")
    else:
        print("False")

5、括號配對檢測

用戶輸入一行字符串,其中可能包括小括號 (),請檢查小括號是否配對正確(本題僅限於小括號)

def match_parentheses(s):
    # 把一個list當做棧使用
    ls = []
    parentheses = "()"
    for i in range(len(s)):
        si = s[i]
        # 如果不是括號則繼續
        if parentheses.find(si) == -1:
            continue
        # 左括號入棧
        if si == '(':
            ls.append(si)
            continue
        if len(ls) == 0:
            return False
        # 出棧比較是否匹配
        p = ls.pop()
        if p == '(' and si == ')':
            continue
        else:
            return False

    if len(ls) > 0:
        return False
    return True

n=input()
result = match_parentheses(n)
if result==True:
    print("配對成功")
else:
    print("配對不成功")

這里是使用list來代替棧的作用,來完成括號匹配的功能

括號匹配問題(所有的括號)算法:

首先設置兩個列表分別存放的是各種括號的開括號和閉括號,然后遍歷給定的字符串,分如下幾種情況:

  1.字符串 首字符 出現在閉括號列表中,直接結束,輸出錯誤
  2.字符串長度不為偶數,直接結束,輸出錯誤
  3.對原始字符串列表化去重,如果去重后的列表長度不為偶數直接結束,輸出錯誤
  4.遍歷字符串,將屬於開括號集合的括號加入到列表中,當遇上一個閉括號的時候計算該閉括號在閉括號列表中的索引與

當前列表最后一個開括號在開括號列表中的索引是否一致,一致則繼續,否則直接結束,輸出錯誤

def bracket_mathch(one_str):
    tmp_list = []
    open_bracket_list = ['(', '[', '{', '<', '']
    close_bracket_list = [')', ']', '}', '>', '']
    one_str_list = list(one_str)
    length = len(one_str_list)
    set_list = list(set(one_str_list))
    num_list = [one_str_list.count(one) for one in set_list]
    if one_str[0] in close_bracket_list:
        return False
    elif length % 2 != 0:
        return False
    elif len(set_list) % 2 != 0:
        return False
    else:
        for i in range(length):
            if one_str[i] in open_bracket_list:
                tmp_list.append(one_str[i])
            elif one_str[i] in close_bracket_list:
                if close_bracket_list.index(one_str[i]) == open_bracket_list.index(tmp_list[-1]):
                    tmp_list.pop()
                else:
                    return False
                    break
    return True



one_str_list = ['({}', '({[<>]})', '[(){}', '{{{{{', '([{})', '}{[)]']
for one_str in one_str_list:
    if bracket_mathch(one_str):
        print(one_str, '括號匹配正確')
    else:
        print(one_str, '括號匹配錯誤')

注:這里僅支持輸入純括號,並對其進行括號匹配判斷,沒有實現括號+字符串的括號匹配

6、天天向上的力量

 一年365天,以第一天的能力為基數,記為1.0,當好好學習時能力值相比前一天提高1‰,當沒有學習時能力值相比前一天下降1‰。

每天努力和每天放任,一年下來的能力值相差多少呢?

import math
dayup = math.pow((1.0+0.001),365)     #每天提高
daydown = math.pow((1.0-0.001),365)     #每天下降
print("每天提高:{:.2f},每天懈怠:{:.2f}".format(dayup,daydown))
>>> 每天提高:1.44,每天懈怠:0.69

這是很基礎的一個調用math庫函數的題,然后使用格式化輸出。

可以看出,經過1年的時間,每天提高一點點竟然達到了 1.69 !!這說明天天向上的力量不可小覷。所以從每天做起,每天改變一點點,日積月累,就會獲得巨大的改變。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM