2021年6月22日,vivo 2022屆提早批 數據挖掘 一面 2道題

1.輸入一個數組,統計數組中有多少個數是7的倍數或者含有數字7

判斷一個數是不是7的倍數能夠直接用取餘的方法,判斷一個數中是否含有數字7,這裏提供兩種方法:一種是將數字轉換成字符串,用 in 進行判斷;另外一種是將數字轉換成字符串,用 find 方法,若是不包含會返回 -1。api

代碼以下:數組

def get_num_1(nums):
    res = 0
    for i in nums:
        if i % 7 ==0 or str(i).find('7') != -1:
            res +=1
    return res
nums = [7,21,34,777,666,888,63]
print(get_num_1(nums))


def get_num_2(nums):
    res = 0
    for i in nums:
        if i % 7 ==0 or '7' in str(i):
            res +=1
    return res
nums = [7,21,34,777,666,888,63]
print(get_num_2(nums))
複製代碼

七月在線AI充電季,開寶箱免費學正價課!

更有200本紙質書等,來就送!猛戳>>>*AI充電季,開寶箱免費學正價課,200本紙質書等包郵送!-七月在線 (julyedu.com)開寶箱,100%有獎!markdown

2.揹包問題oop

2.0-1揹包問題

題目描述:給定物品的重量weights=[1, 2, 5, 6, 7] ,對應的價值values=[1, 6, 18, 22, 28] , 揹包能裝的最大重量爲capicity=11。問:咱們用這個揹包裝什麼物品能得到最大價值? 注意:每件物品只有一件。而且最終重量不能超過揹包所能承載的重量。spa

本題解析參考:www.pianshen.com/article/207…code

分析:orm

首先,說明一下,本題採用動態規劃, 由於問題的自己含最優子結構。 咱們先給出轉態轉移方程:ci

c(i, w) 表示包容量爲w時,考慮前i個物品所能得到的最大價值。。 i表示第i個物品,w表示包容量字符串

第一種狀況: 當前物品的重量超過了包的承載量,顯然裝不上,那它當前的最大價值就是原有包中的價值(不裝這個物品時的最大價值)。get

第二種狀況:當前物品的重量沒有包承載量大。則說明當前這個物品能夠裝進去。 那咱們就得考慮了: 裝這個物品價值大仍是不裝這個物品價值大? 從兩種狀況中選最大的。

右下角的40, 就是咱們所能得到的最大價值

接着,咱們還須要輸出得到最大價值的時候,咱們拿了什麼物品。

從右下角的40開始, 揹包容量爲11,因爲40 與上一行的40相等, 說明咱們沒有裝第五個物品(由於當揹包容量爲11,裝第四個物品的時候,價值已經到達了40)。 緊接着, 在揹包容量爲11時,對應第三個物品,最大價值是25, 因此,咱們裝了第四個物品。 此時,咱們的揹包容量變爲W-w4 即:11-6=5。 因此,對於第三個物品,咱們直接考慮在揹包容量爲5的時候, 能夠看出價值是18,考慮有沒有裝第三個? 由於揹包容量爲5時,第二個物品所對應的最大價值爲7. 因此咱們裝了第三個物品。 接在:W剩 - w3 = 5-5 = 0 。 咱們就能夠得出揹包中裝了第三個和第四個物品。

代碼實現:

#  01 揹包問題
def bag_01(weights, values, capicity):
 
    # [*, *, *, *, *, *, *, *, *, *, *, *]
    # [*, *, *, *, *, *, *, *, *, *, *, *]
    # [*, *, *, *, *, *, *, *, *, *, *, *]
    # [*, *, *, *, *, *, *, *, *, *, *, *]
    # [*, *, *, *, *, *, *, *, *, *, *, *]
    # [*, *, *, *, *, *, *, *, *, *, *, *]
    n = len(values)
    f = [[0 for j in range(capicity+1)] for i in range(n+1)]
    for i in range(1, n+1):
        for j in range(1, capicity+1):
            f[i][j] = f[i-1][j]
            if j >= weights[i-1] and f[i][j] < f[i-1][j-weights[i-1]] + values[i-1]:
                f[i][j] = f[i-1][j-weights[i-1]] + values[i-1]
    return f
 
def show(capicity, weights, f):
    n = len(weights)
    print("最大價值:", f[n][capicity])
    x = [False for i in range(n)]
    j = capicity
    for i in range(n, 0, -1):
        if f[i][j] > f[i-1][j]:
            x[i-1] = True
            j -= weights[i-1]
    print("揹包中所裝物品爲:")
    for i in range(n):
        if x[i]:
            print("第{}個".format(i+1))
 
if __name__ == '__main__':
    # weights 指的是物品的重量
    # values 指的是物品的價值
    # capicity 指的是袋子能裝的重量
    n = 5
    weights = [1, 2, 5, 6, 7]
    values = [1, 6, 18, 22, 28]
    capicity = 11
    m = bag_01(weights, values, capicity)
    # 打印矩陣
    for i in range(len(m)):
        print(m[i])
 
    # 接下來輸出要裝的物品
    show(capicity, weights, m)
複製代碼

七月在線AI充電季,開寶箱免費學正價課!

更有200本紙質書等,來就送!猛戳>>>*AI充電季,開寶箱免費學正價課,200本紙質書等包郵送!-七月在線 (julyedu.com)開寶箱,100%有獎!

相關文章
相關標籤/搜索