遞迴的幾個簡單題目

2022-02-17 20:01:45 字數 3027 閱讀 7995

1、

描述

如上圖所示,由正整數1, 2, 3, ...組成了一棵無限大的二叉樹。從某乙個結點到根結點(編號是1的結點)都有一條唯一的路徑,比如從10到根結點的路徑是(10, 5, 2, 1),從4到根結點的路徑是(4, 2, 1),從根結點1到根結點的路徑上只包含乙個結點1,因此路徑就是(1)。對於兩個結點x和y,假設他們到根結點的路徑分別是(x1, x2, ... ,1)和(y1, y2, ... ,1)(這裡顯然有x = x1,y

= y1),那麼必然存在兩個正整數i和j,使得從xi 和 yj開始,有xi = yj , xi + 1 = yj + 1, xi + 2 = yj + 2,... 現在的問題就是,給定x和y,要求xi(也就是yj)。

輸入輸入只有一行,包括兩個正整數x和y,這兩個正整數都不大於1000。

輸出輸出只有乙個正整數xi。

樣例輸入

10 4
樣例輸出

2
#include using namespace std;

int common(int x, int y)

else if(x > y)

else }

int main()

2、描述

逆波蘭表示式是一種把運算子前置的算術表示式,例如普通的表示式2 + 3的逆波蘭表示法為+ 2 3。逆波蘭表示式的優點是運算子之間不必有優先順序關係,也不必用括號改變運算次序,例如(2 + 3) * 4的逆波蘭表示法為* + 2 3 4。本題求解逆波蘭表示式的值,其中運算子包括+ - * /四個。

輸入輸入為一行,其中運算子和運算數之間都用空格分隔,運算數是浮點數。

輸出輸出為一行,表示式的值。

可直接用printf("%f\n", v)輸出表示式的值v。

樣例輸入

* + 11.0 12.0 + 24.0 35.0
樣例輸出

1357.000000
提示

可使用atof(str)把字串轉換為乙個double型別的浮點數。atof定義在math.h中。

此題可使用函式遞迴呼叫的方法求解。

#include #include #include#include #include using namespace std;

double fun(void)

}int main(void)

3、放蘋果

time limit:1000ms

memory limit:10000k

total submissions:22804

accepted:14503

description

把m個同樣的蘋果放在n個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?(用k表示)5,1,1和1,5,1 是同一種分法。

input

第一行是測試資料的數目t(0 <= t <= 20)。以下每行均包含二個整數m和n,以空格分開。1<=m,n<=10。

output

對輸入的每組資料m和n,用一行輸出相應的k。

sample input

1

7 3

sample output

8
#include using namespace std;

int count(int x, int y)

if(x < y)

return count(x, y - 1) + count(x - y, y);

}int main()

return 0;

}

4、描述

有一間長方形的房子,地上鋪了紅色、黑色兩種顏色的正方形瓷磚。你站在其中一塊黑色的瓷磚上,只能向相鄰的黑色瓷磚移動。請寫乙個程式,計算你總共能夠到達多少塊黑色的瓷磚。

輸入包括多個資料集合。每個資料集合的第一行是兩個整數w和h,分別表示x方向和y方向瓷磚的數量。w和h都不超過20。在接下來的h行中,每行包括w個字元。每個字元表示一塊瓷磚的顏色,規則如下

1)『.』:黑色的瓷磚;

2)『#』:白色的瓷磚;

3)『@』:黑色的瓷磚,並且你站在這塊瓷磚上。該字元在每個資料集合中唯一出現一次。

當在一行中讀入的是兩個零時,表示輸入結束。

輸出對每個資料集合,分別輸出一行,顯示你從初始位置出發能到達的瓷磚數(記數時包括初始位置的瓷磚)。

樣例輸入

6 9 

....#.

.....#

......

......

......

......

......

#@...#

.#..#.

0 0

樣例輸出

45
#include #include using namespace std;

#define max 25

char maps[max][max];

const int moves[4][2] = ,,,};

bool visited[max][max];

int n, m;

int count;

void dfs(int x, int y) }}

int main()

}} count = 1;

memset(visited, false, sizeof(visited));

dfs(x, y);

cout << count << endl;

} return 0;

}

#include int w, h;

char z[21][21];

int f(int x, int y)

}int main(void)

return 0;

}

題目 1004 遞迴 母牛的故事 簡單遞迴演算法

題目 1004 遞迴 母牛的故事 時間限制 1sec 記憶體限制 128mb 提交 61799 解決 19025 題目描述 有一頭母牛,它每年年初生一頭小母牛。每頭小母牛從第四個年頭開始,每年年初也生一頭小母牛。請程式設計實現在第n年的時候,共有多少頭母牛?輸入輸入資料由多個測試例項組成,每個測試例...

簡單遞迴題目分析與解答

1.放蘋果 把m個同樣的蘋果放在n個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法 用k表示 注意 5,1,1和1,5,1 是同一種分法。輸入 第一行是測試資料的數目t 0 t 20 以下每行均包含二個整數m和n,以空格分開。1 m,n 10。輸出 對輸入的每組資料m和n,用一行輸出相應...

幾個題目計畫

1.創業擔保投資網路平台 2.大學生閱讀行為統計與聚類分析 根據每年圖書館資料借閱資訊,進行匯 計和聚類分析,為分析學生閱讀興趣和圖書採購提供決策支援。3.二維 或一維 條形碼製作 識別與列印輸出系統研究 研究二維 或一維 條形碼製作技術與裝置,識別技術與裝置,列印輸出技術與裝置,形成一套完整的系統...