Python代码片段

迭代法

印度国王舍罕酷爱下棋,他打算重赏国际象棋的发明人宰相西萨·班·达依尔。这位聪明的大臣指着象棋盘对国王说:“陛下,我不要别的赏赐,请您在这张棋盘的第一个小格内放入一粒麦子,在第二个小格内放入两粒,第三小格内放入给四粒,以此类推,每一小格内都比前一小格加一倍的麦子,直至放满 64 个格子,然后将棋盘上所有的麦粒都赏给您的仆人我吧!”

1
2
3
4
5
6
7
numberofwheatingrid=1      //第一格子的麦粒
sum +=numberofwheatingrid  //累计麦粒
for i in range(2,64):      //63
    numberofwheatingrid *=2 //每一格都是前一个的两倍
    sum +=numberofwheatingrid  //累加
print(sum)

结果是:9223372036854775807粒麦粒。

二分法

求平方根:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
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

递归-阶乘

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
// 递归实现阶乘函数 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元等等。如果考虑每次奖赏的⾦额和先后顺序,那么最终⼀共有多少种不同的奖赏⽅式呢?”

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
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)

归并排序

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
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

排列——猜密码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
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,"")

算法

算法是内功,内功优秀的人,学起来语言是很容易的,短则两天就可以上手。

数学、英语这些都是基本功,基本功好的人,无论是学习还是工作都会比较顺利。数学是锻炼逻辑思维能力,深入解决问题是绕不开的基本功;英语是世界通行语言,获取最新资讯的有力方式。

点击刷新