列舉及習題

2021-10-02 11:56:29 字數 2002 閱讀 9048

列舉是逐個嘗試答案的一種問題求解策略,就是直接暴力迴圈找出答案,直接看題吧

例:

完美立方:形如a^3 = b ^3+ c ^3 +10 ^3的等式被稱為完美立方等式。編寫乙個程式,對給定的正整數n(n<=100),尋找所以的組合,使得等式成立,其中a,b,c,d大於1,小於等於n且b<=c<=d。

按照a的值,從小到大依次輸出。當兩個完美立方等式中a相等時,b小的優先輸出,仍相同c小的先輸出…

**解題思路:**四重迴圈列舉a,b,c,d,最後加個判斷條件(直接暴力解決)

#include

intmain()

例:生理週期:

人有體力,情商,智商的高峰日子,它們分別每隔23天,28天和33天出現。對於每個人,我們想知道何時三個高峰落在同一天。給定三個高峰出現的日子p,e,i(不一定是第一次高峰出現的日子),在給定另乙個指定的日子d,而你的任務是輸出日子d之後,下一次三個高峰落在同一天的日子(用距離d天表示)

輸入:輸入四個整數:p,e,i和d。p,e,i分別表示體力,情感和智力高峰出現的日子。d是給定的日子。可能小於p,e或i。所有給定日子是非負的並且小於或等於365,所求的日子小於或等於21252.

輸出:從給定日子起,下一次三個高峰同一天的日子(距離給定日子的天數)。

解題思路一般就是迴圈加乙個判斷,那麼如何更快呢,讓迴圈的次數減少。核心如下

for

(k=d+1;

(k-p)%23

;k++

)for(;

(k-e)%28

;k+=23)

for(

;(k-i)%33

;k+=23*

28)printf

("%d"

,k-d)

;

例:小哼最近愛上了「炸彈人」遊戲。你還記得在小霸王遊戲機上的炸彈人嗎?用放置炸彈的方法來消滅敵人。需將畫面上的敵人全部消滅後,並找到隱藏在牆裡的暗門才能過關。

現在有乙個特殊的關卡如下。你只有一枚炸彈,但是這枚炸彈威力超強(殺傷距離超長,可以消滅殺傷範圍內所有的敵人)。請問在**放置炸彈才可以消滅最多的敵人呢。

我們先將這個地圖模型化。牆用 # 表示。這裡有兩種牆,一種是可以被炸掉的,另外一種是不能被炸掉的。但是由於現在只有一枚炸彈,所以都用 # 表示,炸彈是不能穿牆的。敵人用 g 表示,空地用 . 表示,當然炸彈只能放在空地上。

輸入13 13

#############

#gg.ggg#ggg.#

###.#g#g#g#g#

#…#…g#

#g#.###.#g#g#

#gg.ggg.#.gg#

#g#.#g#.#.###

##g…g…#

#g#.#g###.#g#

#…g#ggg.gg#

#g#.#g#g#.#g#

#gg.ggg#g.gg#

#############輸出:

8

#include

intmain()

x=i;y=j;

while

(a[x]

[y]!=

'#')

x=i;y=j;

while

(a[x]

[y]!=

'#')

x=i;y=j;

while

(a[x]

[y]!=

'#')

if(sum>map)

//儲存最大值 }}

}printf

("將炸彈放在(%d,%d)處,最多可消滅%d個敵人。\n"

,p,q,map)

;return0;

}``

天梯賽習題 出生年(列舉)

輸入格式 輸入在一行中給出出生年份y和目標年份中不同數字的個數n,其中y在 1,3000 之間,n可以是2 或3 或4。注意不足4位的年份要在前面補零,例如公元1年被認為是0001年,有2個不同的數字0和1。輸出格式 根據輸入,輸出x和能達到要求的年份。數字間以1個空格分隔,行首尾不得有多餘空格。年...

註解及異常列舉

註解 是一種特殊的注釋,特殊在於可以被編譯器,vm識別.本質上是乙個修飾符,註解都不能修飾語句.override 作用是提醒編譯器,它修飾的方法是乙個覆蓋方法,請幫助我們作檢查 方法覆蓋條件的檢查.只可以修飾方法.它可以 修飾類 type 屬性 field 構造器 constructor 方法 me...

列舉及位運算

目錄 1.基礎列舉演算法 2.整數列舉 3.小數列舉 4.位運算 5.二進位制列舉 列舉是基於已有知識來猜測答案的一種問題求解策略。列舉所有可能是問題解的答案並進行判斷。在演算法競賽中,列舉是一種基本的技巧,廣泛運用於部分分和對拍。實現 int pos 1 for int i 1 i n i if ...