幻方是把一些数字填写在方阵中,使得行、列、两条对角线的数字之和都相等。 欧洲最著名的幻方是德国数学家、画家迪勒创作的版画《忧郁》中给出的一个4阶幻方。

幻方填空_i++

他把1,2,3,...16 这16个数字填写在4 x 4的方格中。表中有些数字已经显露出来,还有些用?和*代替。请你计算出? 和 * 所代表的数字,并把 * 所代表的数字作为本题答案提交。



思路:与六角填数一样,全排列思路。


#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int main()
{
	int sum[10]={0},i,j;
	int a[10]={2,3,4,5,6,7,8,10,12,14};
	do
	{
		memset(sum,0,sizeof(sum));
		sum[0]=16+a[0]+a[1]+13;
		sum[1]=a[2]+a[3]+11+a[4];
		sum[2]=9+a[5]+a[6]+a[7];
		sum[3]=a[8]+15+a[9]+1;
		sum[4]=16+a[2]+9+a[8];
		sum[5]=a[0]+a[3]+a[5]+15;
		sum[6]=a[1]+11+a[6]+a[9];
		sum[7]=13+a[4]+a[7]+1;
		sum[8]=16+a[3]+a[6]+1;
		sum[9]=13+11+a[5]+a[8];
		i=1;
	     while (i<10)
	     {
	     	if (sum[0]!=sum[i])
	     	 break;
	     	 i++;
		 }
		 if (i==10)
		  {
		  	cout<<a[7];
		  	break;
		  }
	}while (next_permutation(a,a+10));
	return 0;
}