第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 numpy 查找由兩個 3 位數(shù)的乘積構成的最大回文

使用 numpy 查找由兩個 3 位數(shù)的乘積構成的最大回文

波斯汪 2023-04-25 15:19:30
當我嘗試使用 numpy 包解決這個問題時,我陷入了這個問題。我的想法是,我將對 100 到 999 之間的 3 位數(shù)字所做的所有計算相乘并保留一個列表,然后檢查列表以查看哪些是回文并保存它們。最后,我將對列表進行排序并獲得最大的回文。下面的代碼顯示了我試圖做的事情。import numpy as npdef void():    list1 = np.array(range(100,999))    list2 = np.array(range(100,999))    k = []        for i,j in zip(list1,list2):        k.append(np.multiply(list1,list2))            b = []        for x in range(0,len(k)):        if(reverseNum(k[x])==k[x]):            b.append(k[x])                print(b)    print(b[-1])    def reverseNum(num):    rev = 0        while(num>0):        rem = num % 10        rev = (rev*10) +rem        num = num // 10            return rev      void()但是,當我嘗試檢查列表中的數(shù)字是否為回文時,出現(xiàn)以下錯誤:Traceback (most recent call last):                                                                                      File "main.py", line 40, in <module>                                                                                    void()                                                                                                              File "main.py", line 22, in void                                                                                        if(reverseNum(k[x]),k[x]):                                                                                          File "main.py", line 31, in reverseNum                                                                                  while(num>0):                                                                                                     ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()  這是否意味著無法使用 numpy 作為解決此問題的方法?如果是,我哪里錯了?編輯:到目前為止我已經(jīng)嘗試過的(因為它被問到):根據(jù)錯誤消息,我嘗試使用np.equalas 以及而np.greater不是檢查但它給出了相同的錯誤。if(reverseNum(k[x])==k[x])num>0
查看完整描述

4 回答

?
白板的微信

TA貢獻1883條經(jīng)驗 獲得超3個贊

假設結果有六位數(shù)的 NumPy 方法(它不能有更多,因為 999 2是 998001):


import numpy as np


v = np.arange(100, 1000)                     # the range of three-digit numbers

a = np.outer(v, v)                           # all the products

print(a[(a // 100000 == a % 10) &            # first digit == sixth digit

        (a // 10000 % 10 == a // 10 % 10) &

        (a // 1000 % 10 == a // 100 % 10)].max())

版畫906609。


使用純 Python 進行雙重檢查:


>>> max(x*y

        for x in range(100, 1000)

        for y in range(100, 1000)

        if str(x*y) == str(x*y)[::-1])

906609


查看完整回答
反對 回復 2023-04-25
?
紫衣仙女

TA貢獻1839條經(jīng)驗 獲得超15個贊

另一個真正的 NumPy 解決方案,使用您的方式反轉數(shù)字(主要是按照.any()錯誤消息中的建議修復它,您固執(zhí)地拒絕嘗試)。


v = np.arange(100, 1000)

a = np.outer(v, v)


num = a.copy()

rev = num * 0

while (m := num > 0).any():

    rev[m] = rev[m] * 10 + num[m] % 10

    num[m] //= 10


print(a[rev == a].max())

沒有面具m你會得到相同的結果 (906609),但它更安全。否則五位數(shù)的乘積不能正確反轉,比如 101*102=10302 變成 203010 而不是 20301。


查看完整回答
反對 回復 2023-04-25
?
慕尼黑的夜晚無繁華

TA貢獻1864條經(jīng)驗 獲得超6個贊

為什么它必須使用 numpy?


# test if palindrome based on str

def is_palindrome(number: int):

    converted_to_string = str(number)

    return converted_to_string == converted_to_string[::-1]



# product of two three-digit numbers

you_right = []

values = []

for x in range(999, 99, -1):

    for y in range(999, 99, -1):

        product = x*y

        if is_palindrome(product):

            values.append((x, y))

            you_right.append(product)

winner = you_right.index(max(you_right))

print(values[winner])

# output

(993, 913)


查看完整回答
反對 回復 2023-04-25
?
精慕HU

TA貢獻1845條經(jīng)驗 獲得超8個贊

您的問題源于您的行,包括zip. 我下面的代碼并不漂亮,但嘗試松散地遵循您的方法。


import numpy as np


def void():

    list1 = np.array(range(100,1000))  # you want to include '999'

    list2 = np.array(range(100,1000))

    k = []

    

    for i,j in zip(list1,list2):

        k.append(np.multiply(list1,j))

        

    b = []

    

    for r, row in enumerate(k):

        for c, cell in enumerate(row):

            if reverseNum(cell)==cell:

                b.append(cell)

            

    print(b)

    print(max(b))


    

def reverseNum(num):

    rev = 0

    

    while(num>0):

        rem = num % 10

        rev = (rev*10) +rem

        num = num // 10

        

    return rev

    

void()


查看完整回答
反對 回復 2023-04-25
  • 4 回答
  • 0 關注
  • 155 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號