2023年藍橋杯A組第三題 方格填數

2021-07-10 23:35:38 字數 1519 閱讀 8135

方格填數

如下的10個格仔

+–+–+–+–+

| # | ? | ? | ? |

+–+–+–+–+

| ? | ? | ? | ? |

+–+–+–+–+

| ? | ? | ? | # |

+–+–+–+–+

#:不能填數字;?:需要填寫數字的空格

填入0~9的數字。要求:連續的兩個數字不能相鄰。

(左右、上下、對角都算相鄰)

一共有多少種可能的填數方案?

請填寫表示方案數目的整數。

注意:你提交的應該是乙個整數,不要填寫任何多餘的內容或說明性文字。

思路:搜尋,把10個空全部填完,然後判斷每乙個數字是否符合要求。

這道題因為需要考慮到上下左右以及對角位置均不可以相鄰,所以需要判斷兩數之間的絕對值,又因為每個數都需要過一遍,所以只用考慮相差為一即可。例如:a = 1, b = 2,對於a而言,b比它大1,因此可以不必考慮對b而言,a比它小1。

另外根據題意,大致我們可以確定需要用到dfs,即深度遍歷,這樣我們才能將所有的情況都過一遍。

**c如下:

#include 

#define row 3

#define col 4

//const int row = 3, col = 4; //row行數,col列數

int visit[10]; //數字的使用情況

int flag[row][col]; //格仔填寫標記

int mpt[row][col]; //格仔

int ans = 0;

void init()

for (i = 0; i < row; i++)

}//左上角和右下角不能填寫任何數字

flag[0][0] = 0;

flag[row - 1][col - 1] = 0;

return ;

}void judge()

, , , , , , , };

int i, j, k, x, y;

int valid = 1; //初始化為合法

for (i = 0; i < row; i++)

for (k = 0; k < 8; k++) //檢測

//相鄰即相減後的絕對值為1 判斷當前是否合法

if (mpt[i][j] - mpt[x][y] == 1)}}

}if (valid)

printf("\n");

}printf("\n");

}return ;

}void dfs(int n)

if (flag[x][y]) //如果當前位置可填入數字}}

else

//不可填的時候換下乙個位置

return ;

}int main(int argc, const

char * argv)

over!!!

2016藍橋杯省賽C C A組第三題 方格填數

題意 如下的10個格仔 填入0 9的數字。要求 連續的兩個數字不能相鄰。左右 上下 對角都算相鄰 一共有多少種可能的填數方案?分析 dfs,劃定邊界,行1 4,列1 3,初始化為int inf,這樣所填入的數字與int inf一定不相鄰,所以可不必單獨考慮 1,1 和 3,4 兩個格仔。includ...

方格填數(2023年藍橋杯)

如圖,如下的10個格仔,填入0 9的數字。要求 連續的兩個數字不能相鄰。左右 上下 對角都算相鄰 一共有多少種可能的填數方案?請填寫表示方案數目的整數。看到這題第乙個想到的方法就是回溯,就很像八皇后,能填進去就填,填不進去就看下乙個位置 我做的是0 9不重複使用 我感覺這題麻煩就在判斷上 1.首先要...

方格填數,藍橋杯2023年第6題

方格填數 如下的10個格仔 如果顯示有問題,也可以參看 圖1.jpg 填入0 9的數字。要求 連續的兩個數字不能相鄰。左右 上下 對角都算相鄰 一共有多少種可能的填數方案?請填寫表示方案數目的整數。注意 你提交的應該是乙個整數,不要填寫任何多餘的內容或說明性文字。小歧異 不知道0 9 可不可以重複使...