演算法筆記 4 3 遞迴

2021-10-24 10:47:20 字數 2839 閱讀 9482

三. 回溯

2. 字母全排列

3. 數樓梯

總時間限制: 1000ms 記憶體限制: 65536kb

描述

逆波蘭表示式是一種把運算子前置的算術表示式,例如普通的表示式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;

vector data;

//存分解後的輸入內容

vector<

double

> cal;

//計算輔助棧

intmain()

// 翻轉一下(方便遍歷)

reverse

(data.

begin()

,data.

end())

;// 利用計算棧求解

double t1,t2;

for(

auto i:data)

}printf

("%f\n"

, cal[0]

);return0;

}

#include

#include

#include

double

exp()}

intmain()

總時間限制: 1000ms 記憶體限制: 65536kb

描述

給定乙個由不同的小寫字母組成的字串,輸出這個字串的所有全排列。 我們假設對於小寫字母有』a』 < 『b』 < … < 『y』 < 『z』,而且給定的字串中的字母已經按照從小到大的順序排列。

輸入新增鏈結描述

輸入只有一行,是乙個由不同的小寫字母組成的字串,已知字串的長度在1到6之間。

輸出

輸出這個字串的所有排列方式,每行乙個排列。要求字母序比較小的排列在前面。字母序如下定義:

已知s = s1s2…sk , t = t1t2…tk,則s < t 等價於,存在p (1 <= p <= k),使得

s1 = t1, s2 = t2, …, sp - 1 = tp - 1, sp < tp成立。

樣例輸入

abc

樣例輸出

abc

acbbac

bcacab

cba

這個題和上面簡單例項的第三個本質完全一樣,就是套了個字母的皮。正好這個可以用我上午寫的雜湊雜湊來套殼子,參考【演算法筆記】4.2 雜湊(雜湊) **

#include

#include

using

namespace std;

char hashmap[10]

;//雜湊表,實現整數到字母的對映

int res[

110]

;//記錄當前生成的全排列

int flag[

110]=;

//記錄整數x是否已在排列中

int n;

//排列位數

void

func

(int index)

//依次把1~n填入第index位

for(

int i=

1;i<=n;i++)}

}int

main()

題目描述

樓梯有 nn 階,上樓可以一步上一階,也可以一步上二階。

編乙個程式,計算共有多少種不同的走法。

輸入格式

乙個數字,樓梯數。

輸出格式

輸出走的方式總數。

輸入輸出樣例

輸入4輸出

5

說明/提示

對於 60% 的資料,n ≤ 50;

對於 100% 的資料,n ≤ 5000。

《演算法筆記》4 3遞迴

一.分治 分治是一種思想,可以用遞迴的方法實現,也可以用非遞迴的方法實現 二.遞迴 自底向上 三.題目 1.全排列 方法一 include using namespace std int n p 11 void generatep int index else if t 0 int main 方法二...

演算法筆記4 3遞迴 問題 A 吃糖果

問題 a 吃糖果 題目描述 名名的媽媽從外地出差回來,帶了一盒好吃又精美的巧克力給名名 盒內共有 n 塊巧克力,20 n 0 媽媽告訴名名每天可以吃一塊或者兩塊巧克力。假設名名每天都吃巧克力,問名名共有多少種不同的吃完巧克力的方案。例如 如果n 1,則名名第1天就吃掉它,共有1種方案 如果n 2,則...

演算法筆記4 3遞迴 神奇的口袋

有乙個神奇的口袋,總的容積是40,用這個口袋可以變出一些物品,這些物品的總體積必須是40。john現在有n個想要得到的物品,每個物品的體積分別是a1,a2 an。john可以從這些物品中選擇一些,如果選出的物體的總體積是40,那麼利用這個神奇的口袋,john就可以得到這些物品。現在的問題是,john...