最近看藍橋杯的題目,有好多這種數學基本方式的題目,有些題目如果可以總結出公式或者是遞推公式,就會很容易就能算出結果。這種全排列的題目,如果只是填空的話,不做提前判斷減少分支的話,暴力破解等個一兩分鐘也能算出來。要是程式設計的話就需要更多的判斷來減少時間開銷了。
把待全排列記錄分為兩個部分:
(1) 確定第一位乙個記錄
(2) 剩下的所有元素
所有記錄的全排列就是所有可能出現在第乙個位置的記錄與剩下所有元素的全排列。
以[1,2,3]為例,
1,2,3的全排列可以看作是
1,[2,3的全排列]
[2,3]的全排列又可以看作是
2,[3的全排列]—————對應123
3,[2的全排列]—————對應132
2,[1,3的全排列]
[1,3]的全排列又可以看作是
1,[3的全排列]—————對應213
3,[1的全排列]—————對應231
3,[1,2的全排列]
[1,2]的全排列又可以看作是
1,[2的全排列]—————對應312
2,[1的全排列]—————對應321
所以很明顯,這就是乙個遞迴的思想:給你部分記錄,全排列就是所有可能出現在第乙個位置的記錄與剩下的元素的全排列,剩下的元素的全排列又是剩下的可能出現在第乙個位置的元素與剩下的元素的全排列,依次重複下去….
分兩個步驟:
下面以藍橋杯的題目說一下全排列的實現
現在小學的數學題目也不是那麼好玩的。
看看這個寒假作業:
□ + □ = □
□ - □ = □
□ × □ = □
□ ÷ □ = □
每個方塊代表1~13中的某乙個數字,但不能重複。
比如:6 + 7 = 13
9 - 8 = 1
3 * 4 = 12
10 / 2 = 5
以及:7 + 6 = 13
9 - 8 = 1
3 * 4 = 12
10 / 2 = 5
就算兩種解法。(加法,乘法交換律後算不同的方案)
你一共找到了多少種方案?
請填寫表示方案數目的整數。
注意:你提交的應該是乙個整數,不要填寫任何多餘的內容或說明性文字。
package lanqiao;
public
class 寒假作業
;dfs
(a,0,12
);system.out.
println
(count);}
//遞迴實現全排列
public
static
void
dfs(
int[
] a,
int start,
int end)
for(
int i = start;i<=end;i++)}
//交換兩個陣列值的位置
public
static
void
swap
(int a,
int i,
int j)
//判斷是否符合
public
static
boolean
judge
(int a)
else
}}
等待一段時間輸出的結果是64 藍橋杯 寒假作業
現在小學的數學題目也不是那麼好玩的。看看這個寒假作業 如果顯示不出來,可以參見 圖1.jpg 每個方塊代表1 13中的某乙個數字,但不能重複。比如 6 7 13 9 8 1 3 4 12 10 2 5 以及 7 6 13 9 8 1 3 4 12 10 2 5 就算兩種解法。加法,乘法交換律後算不同...
藍橋杯 寒假作業
寒假作業 寒假作業 現在小學的數學題目也不是那麼好玩的。看看這個寒假作業 如果顯示不出來,可以參見 圖1.jpg 每個方塊代表1 13中的某乙個數字,但不能重複。比如 6 7 13 9 8 1 3 4 12 10 2 5 以及 7 6 13 9 8 1 3 4 12 10 2 5 就算兩種解法。加法...
藍橋杯 寒假作業
題目描述 現在小學的數學題目也不是那麼好玩的。看看這個寒假作業 每個方塊代表1 13中的某乙個數字,但不能重複。比如 6 7 139 8 13 4 1210 2 5 以及 7 6 139 8 13 4 1210 2 5 就算兩種解法。加法,乘法交換律後算不同的方案 你一共找到了多少種方案?輸入 輸出...