国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

程序員的算法趣題Q12: 平方根數(shù)字

loostudy / 2723人閱讀

摘要:所幸,滿足平方根前十位數(shù)字正好讓的數(shù)字全部出現(xiàn)的數(shù)是存在的。上一篇斐波那契數(shù)列下一篇滿足字母算式的解法本系列總目錄參見程序員的算法趣題詳細(xì)分析和全解

目錄

1. 問題描述

2. 解題分析

3. 代碼及測試


1. 問題描述

????????求在計算平方根的時候,最早讓0~9的數(shù)字全部出現(xiàn)的最小整數(shù)。注意這里只求平方根為正數(shù)的情況,并且請分別求包含整數(shù)部分的情況和只看小數(shù)部分的情況。

例)2的平方根 1.414213562373095048...0~9全部出現(xiàn)需要19位)

2. 解題分析

????????這道題目比較含糊。

????????其實是找平方根(含整數(shù)部分或不含整數(shù)部分的)前十位數(shù)字正好讓 0~9 的數(shù)字全部出現(xiàn)(且不重復(fù))的最小整數(shù)即構(gòu)成0~9的一個排列(permutation)。

????????關(guān)鍵在于題目要求既要求“最早”又要求“最小”。

????????假定按自然數(shù)從小到大遍歷,只有找到了一個平方根前十位數(shù)字正好讓 0~9 的數(shù)字全部出現(xiàn)的數(shù),你才能確信找到了滿足題目條件的最小整數(shù)。

????????在沒有找到滿足“平方根前十位數(shù)字正好讓 0~9 的數(shù)字全部出現(xiàn)”的數(shù)之前,你無法確定后面是不是存在滿足“平方根前十位數(shù)字正好讓 0~9 的數(shù)字全部出現(xiàn)”的數(shù),所以你只能繼續(xù)找下去。

????????所幸,滿足“平方根前十位數(shù)字正好讓 0~9 的數(shù)字全部出現(xiàn)”的數(shù)是存在的。

基本步驟如下:

????????從小到大遍歷自然數(shù):

?????? ????????對每一個自然數(shù):

????????????? ????????求其平方根

????????????????????? 轉(zhuǎn)換成字符串

????????????????????? 取前十個(除小數(shù)點以外的字符),或取小數(shù)點后的前十個字符

????????????????????? 判斷這十個字符是否恰好包含所有的0~9

????????????????????? 如果滿足條件則退出,否則繼續(xù)搜索下一個

????????代碼中用以下判斷前十個字符是否滿足題設(shè)條件:

len(set(list(first10))) == 10

????????這是因為set會自動刪除重復(fù)元素,因此如果set的長度是10而其可能的元素又只能是0~9的話,那就必然滿足條件。

3. 代碼及測試

# -*- coding: utf-8 -*-"""Created on Sat Sep  4 08:51:51 2021@author: chenxy"""import sysimport timeimport datetimeimport math# import randomfrom   typing import List# from   queue import Queue# from   collections import dequeclass Solution:    def squareRoot1(self, sel:int) -> tuple:        """        Find the first interger, for which, either the first 10 digits of its square root,         or the first 10 digits of the decimal part of its square root,         includes all of 0~9.                sel:  0--including integer part; 1: not including integer part        ret:         """                        i = 1        while(1):            i_sqrt = math.sqrt(i)            i_sqrt_str = str(i_sqrt)            # Find the position of decimal point            for k in range(len(i_sqrt_str)):                if i_sqrt_str[k] == ".":                    break                                        if sel == 0:                first10 = i_sqrt_str[0:k] + i_sqrt_str[k+1:11]            else:                first10 = i_sqrt_str[k+1:k+11]                # print(first10,list(first10),set(list(first10)))                        if len(set(list(first10))) == 10:                return i, i_sqrt                        i = i+1    def squareRoot2(self) -> tuple:        """        Find the first interger, for which, the first 10 digits of the decimal part of its square root,         includes all of 0~9.                ret:         """                num=1        str_num="1.000000000000000"        while len(set(list(str_num.split(".")[1][:10])))!=10:        	num+=1        	str_num=str(num**0.5)        return num, num**0.5                    if __name__ == "__main__":                        sln    = Solution()                    tStart = time.time()    num1,num1_sqrt = sln.squareRoot1(0) # including integer part    num2,num2_sqrt = sln.squareRoot1(1) # Only considering fractional part    tCost  = time.time() - tStart    print("num1={0}, num1_sqrt={1:.10f}, tCost = {2:6.3f}(sec)".format(num1,num1_sqrt,tCost))        print("num2={0}, num2_sqrt={1:.10f}, tCost = {2:6.3f}(sec)".format(num2,num2_sqrt,tCost))        tStart = time.time()    num3,num3_sqrt = sln.squareRoot2() # Only considering fractional part        tCost  = time.time() - tStart    print("num3={0}, num3_sqrt={1:.10f}, tCost = {2:6.3f}(sec)".format(num3,num3_sqrt,tCost))      

運行結(jié)果:

????????num1=1362, num1_sqrt=36.9052841745, tCost = ?0.003(sec)
????????num2=143, num2_sqrt=11.9582607431, tCost = ?0.003(sec)
????????num3=143, num3_sqrt=11.9582607431, tCost = ?0.000(sec)

[2021-09-05]

? ? ? ? Bijfah提示了利用字符串方法split()的更間接的代碼,作為squareRoot2()追加到以上代碼中了。善用python內(nèi)置函數(shù)確實能讓代碼和運行效率都有脫胎換骨的效果。謝謝Bijfah的指點!但是squareRoot2()目前只能對付只考慮小數(shù)部分的情況,要對付含整數(shù)部分的情況的話還需要略修改造一下。

? ? ? ? 上一篇:Q11: 斐波那契數(shù)列

? ? ? ? 下一篇:Q13: 滿足字母算式的解法

????????本系列總目錄參見:程序員的算法趣題:詳細(xì)分析和Python全解

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/119272.html

相關(guān)文章

  • 序員算法趣題Q13: 滿足字母算式解法

    摘要:使這個字母算式成立的解法只有這一種。在中用內(nèi)置的函數(shù)進(jìn)行字符串形式的算式值的評估在中判斷字符串表達(dá)式是否合法依據(jù)的規(guī)則是多位數(shù)字的操作數(shù)的第一個字母不能為。上一篇平方根數(shù)字下一篇國名接龍本系列總目錄參見程序員的算法趣題詳細(xì)分析和全解 目錄 1. 問題描述 2. 解題思路 3. 代碼及測試 ...

    Clect 評論0 收藏0
  • 序員算法趣題Q54: 偷懶算盤

    摘要:且聽下回分解基于動態(tài)規(guī)劃策略的優(yōu)化解法參見程序員的算法趣題偷懶的算盤上一篇程序員的算法趣題同數(shù)包夾程序員的算法趣題同數(shù)包夾本系列總目錄參見程序員的算法趣題詳細(xì)分析和全解程序員的算法趣題詳細(xì)分析和全解 目錄 1. 問題描述 2. 解題分析 3. 代碼及測試 4. 后記 1. 問題描述 ??...

    wangzy2019 評論0 收藏0
  • 序員算法趣題Q37: 翻轉(zhuǎn)7段碼(1)

    摘要:漢明距離可以用異或操作實現(xiàn)。這個問題其實可以看作是,具有個節(jié)點的全連接無向圖,每條邊的權(quán)重值代表兩個節(jié)點所代表的數(shù)字的段碼顯示的二進(jìn)制表示之間的漢明距離。 目錄 1. 問題描述 2. 解題分析 3. 代碼及測試 1. 問題描述 ????????問題:求把10個數(shù)字全部顯示出來時,亮燈/滅...

    RdouTyping 評論0 收藏0
  • 序員算法趣題Q19: 朋友朋友還是朋友嗎?

    摘要:基于以上討論可得,本題求解流程如下所示代碼及測試運行結(jié)果上一篇水果酥餅日下一篇異或楊輝三角形本系列總目錄參見程序員的算法趣題詳細(xì)分析和全解 目錄 1. 問題描述 2. 解題分析 3. 代碼及測試 1. 問題描述 ????????六度空間理論非常有名。大概的意思是1個人只需要通過6個中間人就...

    oogh 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<