Python每日兩題系列 1月2號

2021-08-14 06:52:54 字數 1850 閱讀 3460

no.1:

輸入三個整數x,y,z,請把這三個數由小到大輸出。

程式分析:我們想辦法把最小的數放到x上,先將x與y進行比較,如果x>y則將x與y的值進行交換,然後再用x與z進行比較,如果x>z則將x與z的值進行交換,這樣能使x最小。

分析:我們可以直接運用python的sort函式對其進行排序,然後輸入

l = 

for i in range(3):

x = int(input('integer:\n'))

l.sort()

print(l)

如果不用sort函式呢? 這裡採用了列表推導式+字串分片和氣泡排序

a = [int(i) for i in input("請輸入:").split()]

m = len(a)

while m!=1:

for i in range(m-1):

if a[i]>a[i+1]:

x = a[i]

a[i] = a[i+1]

a[i+1] = x

m -= 1

print(a)

一句話暴力操作:

print(sorted([int(input("enter a integer: ")) for x in range(3)]))
no.2

輸出斐波那契數列。

f0 = 0 (n=0)

f1 = 1 (n=1)

fn = f[n-1]+ f[n-2] ( n=>2)

分析:我們觀察斐波那契的遞推式,可以想到兩種方法,遞迴和迭代。

#迭代法:

deffib

(n):

a,b = 1,1

for i in range(n-1):

a,b = b,a+b

return a

print(fib(10))

#遞迴法:

deffib

(n):

if n==1

or n==2:

return

1return fib(n-1)+fib(n-2)

print(fib(10))

還可以使用斐波那契的數學公式:

# 輸出第n個數

n = int(raw_input("第幾個數: "))

# 斐波那契數列的通項公式

f =(1/(5**0.5))*(((1+(5**0.5))/2)**n - ((1-(5**0.5))/2)**n)

print

"第%d個數:"%n,int(f)

# 輸出前n個數列:

l=[1]

for i in range(1,n+1):

f=(1/(5**0.5))*(((1+(5**0.5))/2)**i - ((1-(5**0.5))/2)**i)

還可以使用生成器:

#斐波那契數列---使用生成器

deffib

(max):

n,a,b = 0,0,1

while n < max:

yield b

a,b = b,a+b

n += 1

max = int(input('input max num :'))

for n in fib(max):

print(n)

leetcode每日兩題 Day1 簡單題2

3.無重複字元的最長子串 給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入...

LeetCode每日兩題 day3

leetcode8.字串轉換整數 leetcode7.整數反轉 題目詳情 給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。示例 1 輸入 123 輸出 321 示例 2 輸入 123 輸出 321 示例 3 輸入 120 輸出 21 實現flag 1if x 0else 1 ...

LeetCode每日兩題 day4

leetcode11.盛水最多的容器 leetcode9.回文數 問題詳情 判斷乙個整數是否是回文數。回文數是指正序 從左向右 和倒序 從右向左 讀都是一樣的整數。實現class solution object defispalindrome self,x type x int rtype bool...