存粹做題感悟
如下的10個格仔
(如果顯示有問題,也可以參看【圖1.jpg】)
填入0~9的數字。要求:連續的兩個數字不能相鄰。
(左右、上下、對角都算相鄰)
一共有多少種可能的填數方案?
請填寫表示方案數目的整數。
注意:你提交的應該是乙個整數,不要填寫任何多餘的內容或說明性文字。
可以暴力,也可以全排列或者dfs,麻煩在於符合條件的判定比較冗長且雜。
暴力的話套一打for迴圈可以在中間點塞if判斷減少迴圈次數,反而全排列或dfs只是末端判定,中間不好加判斷語句,但用全排列或者dfs模板還是很簡單的
1先開個一維陣列存0到9,具體每個陣列元素的位置如圖(看了其他博主的部落格也有用二維的也可以,但要注意邊界和敲的時候多敲幾個小括號而已)
2扔進全排列模板:由第0位一次新增直到湊齊
3扔進judge函式判斷,具體位置如圖
package 真題2016
;public
class
fanggetianshu6
else
if(math.
abs(a[1]
-a[4])
==1||math.
abs(a[1]
-a[5])
==1||math.
abs(a[1]
-a[6])
==1||math.
abs(a[1]
-a[2])
==1)else
if(math.
abs(a[2]
-a[5])
==1||math.
abs(a[2]
-a[6])
==1)else
if(math.
abs(a[3]
-a[7])
==1||math.
abs(a[3]
-a[8])
==1||math.
abs(a[3]
-a[4])
==1)else
if(math.
abs(a[4]
-a[7])
==1||math.
abs(a[4]
-a[8])
==1||math.
abs(a[4]
-a[9])
==1||math.
abs(a[4]
-a[5])
==1)else
if(math.
abs(a[5]
-a[8])
==1||math.
abs(a[5]
-a[9])
==1||math.
abs(a[5]
-a[6])
==1)else
if(math.
abs(a[6]
-a[9])
==1||math.
abs(a[7]
-a[8])
==1||math.
abs(a[8]
-a[9])
==1)else counts++;}
public
static
void
swap
(int
a,int i,
int j)
public
static
void
qpl(
int[
] a,
int start)
else}}
public
static
void
main
(string[
] args)
;//就0-9,直接建立方便點
qpl(a,0)
; system.out.
println
(counts);}
}
第七屆藍橋杯 方格填數
方格填數 如下的10個格仔,填入0 9的數字。要求 連續的兩個數字不能相鄰。左右 上下 對角都算相鄰 一共有多少種可能的填數方案?請填寫表示方案數目的整數。注意 你提交的應該是乙個整數,不要填寫任何多餘的內容或說明性文字。flag陣列標誌數字是否已經填在方格中67 8int check int a ...
藍橋杯 第七屆C B組 方格填數
描述 方格填數 如下的10個格仔 圖1.jpg 填入0 9的數字。要求 連續的兩個數字不能相鄰。左右 上下 對角都算相鄰 一共有多少種可能的填數方案?請填寫表示方案數目的整數。注意 你提交的應該是乙個整數,不要填寫任何多餘的內容或說明性文字。思路 每個格和與它相鄰的格的差的絕對值都不能為0 第一格a...
第七屆藍橋杯省賽 方格填數
一 問題描述 二 題目型別 結果填空 三 解題思路及 這題。我丟進了題目閱讀理解的坑里!我以為每個格仔填0 9的數,還被隊友嘲笑,真 閱讀杯 微笑 所以題目就是求0 9這十個數字填進圖中十個方格的填數方案,要求連續的兩個數字不能相鄰。左右 上下 對角都算相鄰 這沒什麼好思考的,乙個暴力破解完事兒!對...