# 方格填数 如下图 ![](https://img-blog.csdnimg.cn/20190313140048205.jpg) 填入0~9的数字。要求:连续的两个数字不能相邻。 (左右、上下、对角都算相邻) 一共有多少种可能的填数方案? ## aop ### before ```cpp #include #include #include using namespace std; int a[10]; int ans; ``` ### after ```cpp int main() { for (int i = 0; i <= 9; i++) a[i] = i; do { if (check()) ans++; } while (next_permutation(a, a + 10)); cout << ans; return 0; } ``` ## 答案 ```cpp bool check() { if (abs(a[0] - a[1]) == 1 || abs(a[0] - a[3]) == 1 || abs(a[0] - a[4]) == 1 || abs(a[0] - a[5]) == 1) return false; if (abs(a[1] - a[2]) == 1 || abs(a[1] - a[4]) == 1 || abs(a[1] - a[5]) == 1 || abs(a[1] - a[6]) == 1) return false; if (abs(a[2] - a[5]) == 1 || abs(a[2] - a[6]) == 1) return false; if (abs(a[3] - a[4]) == 1 || abs(a[3] - a[7]) == 1 || abs(a[3] - a[8]) == 1) return false; if (abs(a[4] - a[5]) == 1 || abs(a[4] - a[7]) == 1 || abs(a[4] - a[8]) == 1 || abs(a[4] - a[9]) == 1) return false; if (abs(a[5] - a[6]) == 1 || abs(a[5] - a[8]) == 1 || abs(a[5] - a[9]) == 1) return false; if (abs(a[6] - a[9]) == 1) return false; if (abs(a[7] - a[8]) == 1 || abs(a[8] - a[9]) == 1) return false; return true; } ``` ## 选项 ### A ```cpp bool check() { if (abs(a[0] - a[1]) == 1 || abs(a[0] - a[3]) == 1 || abs(a[0] - a[4]) == 1 || abs(a[0] - a[5]) == 1) return false; if (abs(a[1] - a[2]) == 1 || abs(a[1] - a[4]) == 1 || abs(a[1] - a[5]) == 1 || abs(a[1] - a[6]) == 1) return false; if (abs(a[2] - a[5]) == 1 || abs(a[2] - a[6]) == 1) return false; if (abs(a[3] - a[4]) == 1 || abs(a[3] - a[7]) == 1 || abs(a[3] - a[8]) == 1) return false; if (abs(a[4] - a[5]) == 1 || abs(a[4] - a[7]) == 1 || abs(a[4] - a[8]) == 1 || abs(a[4] - a[9]) == 1) return false; if (abs(a[5] - a[6]) == 1 || abs(a[5] - a[8]) == 1 || abs(a[5] - a[9]) == 1) return false; if (abs(a[6] - a[7]) == 1) return false; if (abs(a[7] - a[8]) == 1 || abs(a[8] - a[9]) == 1) return false; return true; } ``` ### B ```cpp bool check() { if (abs(a[0] - a[1]) == 1 || abs(a[0] - a[3]) == 1 || abs(a[0] - a[4]) == 1 || abs(a[0] - a[5]) == 1) return false; if (abs(a[1] - a[2]) == 1 || abs(a[1] - a[4]) == 1 || abs(a[1] - a[5]) == 1 || abs(a[1] - a[6]) == 1) return false; if (abs(a[2] - a[5]) == 1 || abs(a[2] - a[6]) == 1) return false; if (abs(a[3] - a[4]) == 1 || abs(a[3] - a[7]) == 1 || abs(a[3] - a[8]) == 1) return false; if (abs(a[4] - a[5]) == 1 || abs(a[4] - a[7]) == 1 || abs(a[4] - a[8]) == 1 || abs(a[4] - a[9]) == 1) return false; if (abs(a[5] - a[6]) == 1 || abs(a[5] - a[8]) == 1 || abs(a[5] - a[9]) == 1) return false; if (abs(a[6] - a[7]) == 1) return false; if (abs(a[7] - a[8]) == 1) return false; if (abs(a[8] - a[9]) == 1) return false; return true; } ``` ### C ```cpp bool check() { if (abs(a[0] - a[1]) == 1 || abs(a[0] - a[3]) == 1 || abs(a[0] - a[4]) == 1 || abs(a[0] - a[5]) == 1) return false; if (abs(a[1] - a[2]) == 1 || abs(a[1] - a[4]) == 1 || abs(a[1] - a[5]) == 1 || abs(a[1] - a[6]) == 1) return false; if (abs(a[2] - a[5]) == 1 || abs(a[2] - a[6]) == 1) return false; if (abs(a[3] - a[4]) == 1 || abs(a[3] - a[7]) == 1 || abs(a[3] - a[8]) == 1) return false; if (abs(a[4] - a[5]) == 1 || abs(a[4] - a[7]) == 1 || abs(a[4] - a[8]) == 1 || abs(a[4] - a[9]) == 1) return false; if (abs(a[5] - a[6]) == 1 || abs(a[5] - a[8]) == 1 || abs(a[5] - a[9]) == 1) return false; if (abs(a[6] - a[9]) == 1) return false; if (abs(a[7] - a[8]) == 1) return false; return true; } ```