历届试题 幻方填空(全排列)

来源:互联网 发布:js删除div标签 编辑:程序博客网 时间:2024/06/03 20:05

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

C_p04

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


16的全排列的很大,所以只要对格子中没有出现的数字进行全排列即可

STL代码:

#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;}


0 0
原创粉丝点击