4、标题: 幻方填空
幻方是把一些数字填写在方阵中,使得行、列、两条对角线的数字之和都相等。
欧洲最著名的幻方是德国数学家、画家迪勒创作的版画《忧郁》中给出的一个4阶幻方。
他把1,2,3,...16 这16个数字填写在4 x 4的方格中。
表中有些数字已经显露出来,还有些用?和*代替。
请你计算出? 和 * 所代表的数字。并把 * 所代表的数字作为本题答案提交。
答案是一个整数,请通过浏览器直接提交该数字。
注意:不要提交解答过程,或其它辅助说明类的内容。
解题思路:1、直接用解答,先从第一行和第一列开始筛选,第一行的两个空只能是2和3,而第一列两个空只能是4和5 ,算一下即可得*=12
2、数组全排列
直接上代码
#include <iostream>
using namespace std;
void swap(int *a,int *b);
void allsort(int *a,int cnt ,int n);
int m=0;
int main(){
int a[]={2,3,4,5,6,7,8,10,12,14};
allsort(a,0,10);
cout<<m;
}
void swap(int *a,int *b){
int temp=*a;
*a=*b;
*b=temp;
}
void allsort(int *a,int cnt,int n){
if(cnt==n){//一个全排列
//判断是否符合条件
if(a[0]+a[1]==5&&a[2]+a[3]+a[4]==23&&a[5]+a[6]+a[7]==25&&a[8]+a[9]==18
&&a[2]+a[8]==9&&a[0]+a[3]+a[5]==19&&a[1]+a[6]+a[9]==23&&a[4]+a[7]==20
&&a[3]+a[6]==17&&a[5]+a[8]==10)
cout<<a[7]<<endl;
m++;
}
for (int i=cnt;i<n;i++){
swap(a[i],a[cnt]);
allsort(a,cnt+1,n);
swap(a[i],a[cnt]);
}
}
result=12