三. 回溯
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
樣例輸出
abcacbbac
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...