蓝桥杯之《幻方填空》C++

您所在的位置:网站首页 欧洲最有名的画家 蓝桥杯之《幻方填空》C++

蓝桥杯之《幻方填空》C++

2024-07-12 00:05| 来源: 网络整理| 查看: 265

蓝桥杯第四届(2013)省赛《幻方填空》

题目描述: 幻方是把一些数字填写在方阵中,使得行、列、两条对角线的数字之和都相等。 欧洲最著名的幻方是德国数学家、画家迪勒创作的版画《忧郁》中给出的一个4阶幻方。 他把1,2,3,…16 这16个数字填写在4 x 4的方格中。

幻方填空 题目大意: 本题为填空题,只要求提交*号处的数字。 在问号和星号处填入数字,要求每行、每列以及两条对接线的数字之和相等。 问星号处的数字是多少。

解题思路: 利用C++ 头文件algorithm中的全排列函数next_permutation(),即例出图中1~16没有出现的数字,排列其所有可能的顺序,直到其顺序符合行、列、两条对接线的数字之和相等,输出并退出。

最终答案: 12

C++代码:

#include #include using namespace std; int main() { int n[]={2,3,4,5,6,7,8,10,12,14};//数组n存放?和*数字。 int v[4][4]={ 0 };//二维数组v。 //给二维数组赋初值。 v[0][0]=16;v[0][3]=13; // 16 ? ? 13 v[1][2]=11; // ? ? 11 ? v[2][0]=9; // 9 ? ? * v[3][1]=15;v[3][3]=1; // ? 15 ? 1 do//全排列循环 { //将全排列后的数组n填入二维数组v v[0][1]=n[0];v[0][2]=n[1]; v[1][0]=n[2];v[1][1]=n[3];v[1][3]=n[4]; v[2][1]=n[5];v[2][2]=n[6];v[2][3]=n[7]; v[3][0]=n[8];v[3][2]=n[9]; //每行相加 int h1=v[0][0]+v[0][1]+v[0][2]+v[0][3]; int h2=v[1][0]+v[1][1]+v[1][2]+v[1][3]; int h3=v[2][0]+v[2][1]+v[2][2]+v[2][3]; int h4=v[3][0]+v[3][1]+v[3][2]+v[3][3]; //每列相加 int L1=v[0][0]+v[1][0]+v[2][0]+v[3][0]; int L2=v[0][1]+v[1][1]+v[2][1]+v[3][1]; int L3=v[0][2]+v[1][2]+v[2][2]+v[3][2]; int L4=v[0][3]+v[1][3]+v[2][3]+v[3][3]; //对角线相加 int x1=v[0][0]+v[1][1]+v[2][2]+v[3][3]; int x2=v[0][3]+v[1][2]+v[2][1]+v[3][0]; //判断每行,每列,两对角线的和是否相等 if(h1==h2&&h2==h3&&h3==h4&&h4==L1&& L1==L2&&L2==L3&&L3==L4&&L4==x1&& x1==x2) { //如果相等,输出二维数组 for(int i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3