歡迎光臨陜西驪山低速風(fēng)機(jī)動(dòng)力制造有限公司官網(wǎng)!

全國咨詢熱線:

400-8888-888

把兩個(gè)數(shù)分割叫做什么_將兩個(gè)數(shù)

所屬分類:技術(shù)文章 發(fā)布日期:2024-10-23 瀏覽次數(shù):1

  準(zhǔn)備好了嗎把兩個(gè)數(shù)分割叫做什么?我們開始答題吧!

  Q1:入門

  嘗試用編程解決問題

  難度系數(shù):★

  優(yōu)秀的掃地機(jī)器人

 ?。↖Q:80 目標(biāo)時(shí)間:20分鐘)

  現(xiàn)在有很多制造商都在賣掃地機(jī)器人把兩個(gè)數(shù)分割叫做什么,它非常有用把兩個(gè)數(shù)分割叫做什么,能為忙碌的我們分擔(dān)家務(wù)負(fù)擔(dān)。不過我們也很難理解為什么掃地機(jī)器人有時(shí)候會(huì)反復(fù)清掃某一個(gè)地方。

  假設(shè)有一款不會(huì)反復(fù)清掃同一個(gè)地方的機(jī)器人把兩個(gè)數(shù)分割叫做什么,它只能前后左右移動(dòng)。舉個(gè)例子,如果第1 次向后移動(dòng),那么連續(xù)移動(dòng)3 次時(shí),就會(huì)有以下9 種情況( 圖6 )。又因?yàn)榈? 次移動(dòng)可以是前后左右4 種情況,所以移動(dòng)3 次時(shí)全部路徑有9×4 = 36 種。

  ※ 最初的位置用0 表示,其后的移動(dòng)位置用數(shù)字表示。

  

  問題:

  求這個(gè)機(jī)器人移動(dòng)12 次時(shí),有多少種移動(dòng)路徑?

  

  Q2:初級(jí)

  解決簡(jiǎn)單問題體會(huì)算法效果

  難度系數(shù):★★

  朋友的朋友也是朋友嗎

  (IQ:90目標(biāo)時(shí)間:25分鐘)

  “六度空間理論”非常有名。大概的意思是1 個(gè)人只需要通過6 個(gè)中間人就可以和世界上任何1 個(gè)人產(chǎn)生間接聯(lián)系。本題將試著找出數(shù)字的好友(這里并不考慮親密指數(shù))。

  假設(shè)擁有同樣約數(shù)(不包括1)的數(shù)字互為“好友”,也就是說,如果兩個(gè)數(shù)字的最大公約數(shù)不是1,那么稱這兩個(gè)數(shù)互為好友。

  從1~N 中任意選取一個(gè)“合數(shù)”,求從它開始,要經(jīng)歷幾層好友,才能和其把兩個(gè)數(shù)分割叫做什么他所有的數(shù)產(chǎn)生聯(lián)系(所謂的“合數(shù)”是指“有除1 以及自身以外的約數(shù)的自然數(shù)”)。

  舉個(gè)例子,N = 10 時(shí),1~10 的合數(shù)是4、6、8、9、10 這5 個(gè)。

  如果選取的是10,那么10 的好友數(shù)字就是公約數(shù)為2 的4、6、8這3 個(gè)。而9 是6 的好友數(shù)字(公約數(shù)為3),所以10 只需要經(jīng)過2 層就可以和9 產(chǎn)生聯(lián)系(圖5 )。如果選取的是6,則只需經(jīng)過1 層就可以聯(lián)系到4、8、9、10 這些數(shù)字。因此N = 10 時(shí),無論最初選取的合數(shù)是什么,最多經(jīng)過2 層就可以與其他所有數(shù)產(chǎn)生聯(lián)系。

  

  問題:

  求從1~N 中選取7 個(gè)合數(shù)時(shí),最多經(jīng)過6 層就可以與其他所有數(shù)產(chǎn)生聯(lián)系的最小的N。

  Q3:中級(jí)

  優(yōu)化算法實(shí)現(xiàn)高速處理

  難度系數(shù):★★★

  優(yōu)雅的IP 地址

 ?。↖Q:100 目標(biāo)時(shí)間:30分鐘)

  可能大部分讀者都清楚,IPv4 中的IP 地址是二進(jìn)制的32 位數(shù)值。不過,這樣的數(shù)值對(duì)我們?nèi)祟惗钥勺x性比較差,所以我們通常會(huì)以8 位為1 組分割,用類似192.168.1.2 這種十進(jìn)制數(shù)來表示它( 圖12 )。

  

  這里,我們思考一下十進(jìn)制數(shù)0~9 這10 個(gè)數(shù)字各出現(xiàn)1 次的IP 地址(像正常情況一樣,省略每組數(shù)字首位的0。也就是說,不能像192.168.001.002 這樣表示,而要像192.168.1.2 這樣來表示)

  問題:

  求用二進(jìn)制數(shù)表示上述形式的IP 地址時(shí),能使二進(jìn)制數(shù)左右對(duì)稱的IP 地址的個(gè)數(shù)(用二進(jìn)制數(shù)表示時(shí)不省略0,用完整的32 位數(shù)表示)。

  

  Q4:高級(jí)

  改變思路讓程序速度更快

  難度系數(shù):★★★★

  異性相鄰的座次安排

 ?。↖Q:130 目標(biāo)時(shí)間:60分鐘)

  回想起學(xué)生時(shí)期調(diào)座位的時(shí)候,我們的心里總是會(huì)小鹿亂撞。想必很多人都對(duì)誰會(huì)坐自己旁邊這件事莫名地激動(dòng)吧?

  這里我們考慮一種“前后左右的座位上一定都是異性”的座次安排。也就是說,像圖26 右側(cè)那樣,前后左右都是同性的座次安排是不符合要求的(男生用藍(lán)色表示,女生用灰色表示)。

  

  問題:

  假設(shè)有一個(gè)男生和女生分別有15 人的班級(jí),要像圖26 那樣,排出一個(gè)6×5的座次。求滿足上述條件的座次安排共多少種(前后或者左右鏡像的座次也看作不同的安排。另外,這里不在意具體某個(gè)學(xué)生坐哪里,只看男生和女生的座次安排)?

  

  答案及解析

  Q1-Q4

  Q1解題思路

 把兩個(gè)數(shù)分割叫做什么_將兩個(gè)數(shù)

  用坐標(biāo)(0, 0) 表示最初的位置。從這個(gè)原點(diǎn)開始,避開已經(jīng)走過的坐標(biāo),使機(jī)器人前進(jìn)。用深度優(yōu)先搜索就可以實(shí)現(xiàn)邏輯,如代碼清單08.01 所示。

  

  Q1答案

  324932種。

  Q2解題思路

  要解決這個(gè)問題,首先要正確理解問題中出現(xiàn)的詞。首先是“合數(shù)”。

  

  其次是“公約數(shù)”這個(gè)詞。小學(xué)的時(shí)候,我們就做過求最大公約數(shù)的題。公約數(shù)的意思就是“共同的約數(shù)”。這里,擁有共同約數(shù)的數(shù)字互為“好友”,那么就需要求最大公約數(shù)非1 的情況。

  從1~N 中選取7 個(gè)合數(shù),且“最多經(jīng)過6 層”,那么可以得知,我們要找的是“由2 個(gè)數(shù)相乘得到的數(shù)字”的組合。這樣的話,乘法運(yùn)算中的這2 個(gè)數(shù)就會(huì)成為公約數(shù)。

  舉個(gè)例子,選出a~h 這些數(shù)。簡(jiǎn)單地說就是,當(dāng)7 個(gè)數(shù)字分別是以下的形式時(shí),經(jīng)過6 層就能與其他所有數(shù)產(chǎn)生聯(lián)系。

  a × b, b× c, c× d, d × e, e × f, f× g, g ×h

  ※這里a~h 這些數(shù)字必須“互質(zhì)”。

  

  Point!

  更進(jìn)一步考慮,也可以像本題中的例子一樣,把第1 個(gè)數(shù)字設(shè)置成“平方數(shù)”(即4),也就是說變成下面這樣的組合更好。

a × a, a × b, b × c, c × d, d × e, e × f, f × g

  末尾如果同樣設(shè)置成平方數(shù)就會(huì)變得更小,也就是變成下面這樣的組合。

a × a, a × b, b × c, c × d, d × e, e × f, f × f

  用Ruby 可以像代碼清單19.01 這樣實(shí)現(xiàn)。

  

  

  Q2答案

  55

  滿足條件的組合為:

  [4, 26, 39, 33, 55, 35, 49]

  Q3解題思路

  按照題意,用十進(jìn)制數(shù)表示時(shí)要使用0~9 這10 個(gè)數(shù)字各1 次,那么最高位是除0 以外的9 種情況,而其他各個(gè)數(shù)位可分別使用0~9 這10個(gè)數(shù)字各1 次,其排列組合一共9!(9 的階乘)種,所以總共要遍歷9×9! 種,也就是3265920 種情況。

  

  要想求左右對(duì)稱的二進(jìn)制數(shù),可以通過把16 位的二進(jìn)制數(shù)逆序排列,并將結(jié)果與該16 位的二進(jìn)制數(shù)本身拼合,即生成32 位數(shù)來求得。因?yàn)槭?6 位,所以全量搜索時(shí)只需要遍歷65536 種情況即可。

  然后,把這個(gè)二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù),分別使用0~9 這10 個(gè)數(shù)字各1 次即可。

  

  用Ruby 實(shí)現(xiàn)時(shí),代碼如代碼清單40.01 所示。

  

  執(zhí)行程序可得到正確答案“8”,因而符合條件的IP 地址有8 個(gè),如表4 所示。

  

  Point!

  用十進(jìn)制數(shù)表示的時(shí)候,如果以點(diǎn)號(hào)分割的各部分左右對(duì)稱,那么整體也就左右對(duì)稱,因而只需要調(diào)查0~255 這些數(shù)對(duì)應(yīng)的二進(jìn)制數(shù)中左右對(duì)稱的數(shù)就可以了。也就是說,A.B.C.D 這種形式中,A 要和D 對(duì)稱,B 要和C 對(duì)稱。

  下面我們?cè)囍页鯝~D 的各種組合中,0~9 這10 個(gè)數(shù)字各使用1次的組合。每組(A, D),( B, C)生成的IP地址有8 種情況,所以用組合數(shù)乘以8 就可以求出結(jié)果。

  用Ruby 實(shí)現(xiàn)時(shí),代碼如代碼清單40.02 所示。

  

 把兩個(gè)數(shù)分割叫做什么_將兩個(gè)數(shù)

  Q3答案

  8個(gè)。

  Q4解題思路

  如果完全按照問題描述實(shí)現(xiàn),只需要遍歷30 個(gè)座位中15 個(gè)男生的座次,滿足條件就OK 了。如果不考慮可擴(kuò)展性、處理速度等,只需要把不符合條件的情況排除就可以了,并不是很難。

  這里,我們事先準(zhǔn)備好要排除的座次安排,統(tǒng)計(jì)不在這個(gè)范圍內(nèi)的座次安排即可。用Ruby 實(shí)現(xiàn)時(shí),如代碼清單68.01 所示。

  

  要想改善處理速度,就要考慮“如何縮小搜索范圍”?;镜霓k法不外乎“剪枝”和“內(nèi)存化”。

  這里,我們事先準(zhǔn)備前2 排的座次安排,然后生成下一排可能的安排,并遞歸地搜索下去。同時(shí),把已經(jīng)搜索過的結(jié)果保存到內(nèi)存中,避免重復(fù)搜索(代碼清單68.02)。

  

  上面這個(gè)程序可以在2 秒左右求出正確答案。

評(píng)論列表

還沒有評(píng)論,快來說點(diǎn)什么吧~

發(fā)表評(píng)論

真誠期待與您的合作

獲取報(bào)價(jià)·了解更多業(yè)務(wù)·7*24小時(shí)專業(yè)服務(wù)

聯(lián)系我們