日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[蓝桥杯2016决赛]反幻方-next_permutation枚举

發布時間:2023/12/4 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [蓝桥杯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枚举的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。