Python代码片段
迭代法
古印度国王舍罕酷爱下棋,他打算重赏国际象棋的发明人宰相西萨·班·达依尔。这位聪明的大臣指着象棋盘对国王说:“陛下,我不要别的赏赐,请您在这张棋盘的第一个小格内放入一粒麦子,在第二个小格内放入两粒,第三小格内放入给四粒,以此类推,每一小格内都比前一小格加一倍的麦子,直至放满 64 个格子,然后将棋盘上所有的麦粒都赏给您的仆人我吧!”
numberofwheatingrid=1 //第一格子的麦粒
sum +=numberofwheatingrid //累计麦粒
for i in range(2,64): //到63格
numberofwheatingrid *=2 //每一格都是前一个的两倍
sum +=numberofwheatingrid //累加
print(sum)
结果是:9223372036854775807
粒麦粒。
二分法
求平方根:
import math
min=1
n=int(input("please in put a number:"))
max=n
for i in range(100):
middle=(min+max)/2.0
square=middle**2
delta=abs(square/n-1)
print(middle)
if delta<=0.0000001:
print("The %f 's sqrt is %f"%(n,middle))
break
else:
if square>n:
max=middle
else:
min=middle
递归-阶乘
// 递归实现阶乘函数 factorial
def func(n):
if n==0:
return 1
else:
return n*func(n-1)
x=func(5)
print(x)
递归-赏金
舍罕王和他的宰相⻄萨·班·达依尔现在来到了当代。这次国王学乖了,他对宰相说:“这次我不⽤⻨⼦奖赏你了,我直接给你货币。另外,我也不⽤棋盘了,我直接给你⼀个固定数额的奖赏。” 宰相思考了⼀下,回答道:“没问题,陛下,就按照您的意愿。不过,我有个⼩⼩的要求。那就是您能否列出所有可能的奖赏⽅式,让我⾃⼰来选呢?假设有四种⾯额的钱币,1元、2元、5元和10元,⽽您⼀共给我10元,那您可以奖赏我1张10元,或者10张1元,或者5张1元外加1张5元等等。如果考虑每次奖赏的⾦额和先后顺序,那么最终⼀共有多少种不同的奖赏⽅式呢?”
rewards = [1, 2, 5, 10]
def getResult(totalReward, result=[]):
if totalReward == 0:
print(result)
elif totalReward < 0:
return
else:
for rd in rewards:
newResult = result.copy()
newResult.append(rd)
print("TotalReward:"+str(totalReward))
print("Rd:"+str(rd))
getResult(totalReward - rd, newResult)
归并排序
def merge(left, right):
res = []
while left and right:
min_val = left.pop(0) if left[0] < right[0] else right.pop(0)
res.append(min_val)
res += left if left else right
return res
def merge_sort(A):
if len(A) <= 1:
res = A
else:
mid = len(A) // 2
left, right = merge_sort(A[:mid]), merge_sort(A[mid:])
res = merge(left, right)
return res
排列——猜密码
dict=["a","b","c","d","e"]
origPsw="aeaaeed"
def calcPsw(count,res):
if (count<=0):
if(res==origPsw):
print("password:"+res)
return
c=count-1
for i in dict:
newRes=res+i
calcPsw(c,newRes)
calcPsw(7,"")
算法
算法是内功,内功优秀的人,学起来语言是很容易的,短则两天就可以上手。
数学、英语这些都是基本功,基本功好的人,无论是学习还是工作都会比较顺利。数学是锻炼逻辑思维能力,深入解决问题是绕不开的基本功;英语是世界通行语言,获取最新资讯的有力方式。