一、算24
描述:
給出4個小於10的正整數,可以使用加、減、乘、除4種運算以及括號把4個數連接起來得到一個表達式。現在問題是,是否存在一種方式使得所得表達式的結果等於24。
這里加、減、乘、除以及括號的運算結果和運算優先級跟平常定義一致。
例如,對於5,5,5,1,可知5×(5-1/5)=24。又如,對於1,1,4,2無論如何都不能得到24
代碼:
from itertools import permutations n1 = input("請輸入第一個數:\n") n2 = input("請輸入第二個數:\n") n3 = input("請輸入第三個數:\n") n4 = input("請輸入第四個數:\n") n = n1+n2+n3+n4 sum = 1 for i in n: sum *= eval(i) if sum < 24: print("NO") exit() notation = ['+', '-', '*', "/"] st = set() num = 0 number = set(permutations(n))#將n進行相應的排列組合 for i in notation: s = i t1 = notation.copy() t1.remove(i)#進行一次就去掉一個運算符 for j in t1: s += j t2 = t1.copy() t2.remove(j) for p in t2: s += p st.add(s) s = i+j s = i newst = set() for i in number: for j in st: newst.add(i[0]+j[0]+i[1]+j[1]+i[2]+j[2]+i[3]) # print(newst) all = set() for i in newst: i1 = '('+i[0:3]+')'+i[3:] i2 = i[0:2]+'('+i[2:5]+')'+i[5:] i3 = i[0:4] + '(' + i[4:] + ')' i4 = '(('+i[0:3]+')'+i[3:5]+")"+i[5:] i5 = i[0:2]+'(('+i[2:5]+')'+i[5:]+")" i6 = '(' + i[0:2] + '(' + i[2:5] + '))' + i[5:] i7 = i[0:2]+'('+i[2:4]+'('+i[4:]+"))" all.add(i1) all.add(i2) all.add(i3) all.add(i4) all.add(i5) all.add(i6) all.add(i7) result = [] for i in all: try: if eval(i) == 24: result.append(i) except: pass print("YES") print("("+sorted(result)[0]+")")
運行結果:
二、Collatz猜想
描述:
Collatz猜想也叫3n+1猜想,給一個正整數,如果是偶數,則減半;如果是奇數,則變為它的三倍加一。直到變為1停止。猜想對於所有正整數經過足夠多次變換最終達到1。
代碼:
m=int(input("輸入一個整數:")) while m!=1: if m%2==0: m=m/2; print('%.1f' %m) else: m=(3*m+1); print('%.1f' %m)
運行結果:
三、二分法求平方根
描述:
設計一個用二分法計算一個大於或等於 1 的實數 n 的平方根的函數sqrt_binary(n),計算精度控制在計算結果的平方與輸入的誤差不大於1e-6。
代碼:
import math def sqrt_biary(n): low=0 #設置下限為0 high=max(n,1) #設置上限為n和1之中的最大數,即:如果n>=1,那么上限為n;如果n<1,那么上限為1 guess=(low+high)/2 #先從中間值開始猜 count=1 #設置猜測次數起始值為1 while abs(guess**2-n)>(1e-6) and count<100: #當猜測值的平方和n本身的差值無限接近誤差值時,循環才會停止;同時設置猜測次數不超過100次 if guess**2<n: #如果猜測值的平方小於n,那么將此設為下限 low=guess else: #如果猜測值的平方大於n,那么將此設為上限 high=guess guess=(low+high)/2 #根據新的上下限,重新進行猜測 count+=1 #猜測次數每次增加1 print(guess) m=float(input("請輸入需要計算的數:")) print("二分法運算結果:") sqrt_biary(m) print("庫函數運算結果:\n",math.sqrt(m))
運行結果: