[蓝桥杯2016决赛]反幻方-next_permutation枚举
生活随笔
收集整理的這篇文章主要介紹了
[蓝桥杯2016决赛]反幻方-next_permutation枚举
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
我國古籍很早就記載著
2 9 4
7 5 3
6 1 8
這是一個三階幻方。每行每列以及對角線上的數字相加都相等。
下面考慮一個相反的問題。
可不可以用 1~9 的數字填入九宮格,使得:每行每列每個對角線上的數字和都互不相等呢?
這應該能做到。
比如:
9 1 2
8 4 3
7 5 6
你的任務是搜索所有的三階反幻方。并統計出一共有多少種。旋轉或鏡像算同一種。
比如:
9 1 2 7 8 9 2 1 9
8 4 3 5 4 1 3 4 8
7 5 6 6 3 2 6 5 7
輸出
輸出一個整數表示答案
解題思路:
旋轉/4,鏡像/2,所以/8
代碼如下:
#include <iostream> #include <algorithm> using namespace std;int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};bool check() {int r1 = a[0] + a[1] + a[2];int r2 = a[3] + a[4] + a[5];int r3 = a[6] + a[7] + a[8];int r4 = a[0] + a[3] + a[6];int r5 = a[1] + a[4] + a[7];int r6 = a[2] + a[5] + a[8];int r7 = a[0] + a[4] + a[8];int r8 = a[2] + a[4] + a[6];if (r1 != r2 && r1 != r3 && r1 != r4 && r1 != r5 && r1 != r6 && r1 != r7 && r1 != r8 &&r2 != r3 && r2 != r4 && r2 != r5 && r2 != r6 && r2 != r7 && r2 != r8 &&r3 != r4 && r3 != r5 && r3 != r6 && r3 != r7 && r3 != r8 &&r4 != r5 && r4 != r6 && r4 != r7 && r4 != r8 &&r5 != r6 && r5 != r7 && r5 != r8 &&r6 != r7 && r6 != r8 && r7 != r8) {return true;} elsereturn false; } int ans;int main() {do {if (check())ans++;} while (next_permutation(a, a + 9));cout << ans / 8 << endl;return 0; }總結
以上是生活随笔為你收集整理的[蓝桥杯2016决赛]反幻方-next_permutation枚举的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 液晶显示器动态对比度是不是越大越好? 1
- 下一篇: [蓝桥杯2016决赛]平方末尾-数论,枚