數字金字塔最大路徑和 遞迴

2022-08-17 06:18:24 字數 1472 閱讀 3822

假設有如下所示的乙個數字金字塔,現在,要求寫乙個程式來查詢從頂點到底部任意處結束的路徑,使路徑經過的數字的和最大,並輸出該路徑的最大和。比如以下金字塔的和最大路徑的和為7+3+8+7+5=30。

73 2

8 1 0

2 7 4 4

4 5 2 6 5

c++ code 12

3456

78910

1112

1314

1516

1718

1920

2122

2324

2526

2728

2930

3132

3334

3536

3738

3940

4142

4344

4546

4748

4950

5152

#include

#include

using

namespace

std;

const

intmaxlayer = 5; 

// 金字塔的最大層數

/** @brief

* 計算金字塔中第layer層第pos個元素在陣列中的下標

** @param layer int 金字塔中第layer層

* @param pos int 金字塔中第layer層第pos個元素

* @return int**/

intindex(

intlayer, 

intpos)

/** @brief

* 金字塔自上而下路徑中,路徑和的最大值

** @param pnums int* 儲存金字塔中的數字,這裡是一維陣列,按層次順序進行儲存

* @param layer int 金字塔中的第layer層[1, maxlayer]

* @param pos int 金字塔中第layer層的第pos([0, layer-1])個元素

* @return int 最大路徑和**/

intmaxpathsum(

int*pnums, 

intlayer, 

intpos)

/*** 第layer層的第pos個元素,只能向第layer+1層的第pos或第pos+1個元素走

*/return

max(maxpathsum(pnums, layer + 

1, pos + 

0), maxpathsum(pnums, layer + 

1, pos + 1))

+ pnums[index(layer, pos)];

}int

main()

;cout << maxpathsum(nums, 1, 

0) << endl;

return0;

}說明:程式測試有限,不足還望指出。請不吝賜教!      

字母金字塔(類同數字金字塔)

問題描述 讓程式要求使用者輸入乙個大寫字母,使用巢狀迴圈產生像下面這樣的金字塔圖案 aaba abcba abcdba abcdecba 演算法分析 每行包括三個部分內容 若干個空格 正序排列的字母 倒序排列的字幕。使用乙個外部迴圈來處理行,在每乙個行中使用三個內部迴圈 乙個處理空格,乙個以公升序列...

數字金字塔

觀察下面的數字金字塔。寫乙個程式來查詢從最高點到底部任意處結束的路徑,使路徑經過數字的和最大。每一步可以走到左下方的點也可以到達右下方的點。7 3 8 8 1 0 2 7 4 4 4 5 2 6 5在上面的樣例中,從7 到 3 到 8 到 7 到 5 的路徑產生了最大 多組輸入資料 第乙個行包含 r...

數字金字塔

題目 題目描述 觀察下面的數字金字塔。寫乙個程式來查詢從最高點到底部任意處結束的路徑,使路徑經過數字的和最大。每一步可以走到左下方的點也可以到達右下方的點。7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 在上面的樣例中,從7 到 3 到 8 到 7 到 5 的路徑產生了最大 輸入輸出格式...