高职组:4、幻方填空

4、标题幻方填空

    幻方是把一些数字填写在方阵中,使得行、列、两条对角线的数字之和都相等。

    欧洲最著名的幻方是德国数学家、画家迪勒创作的版画《忧郁》中给出的一个4阶幻方。 

    他把1,2,3,...16 16个数字填写在4 x 4的方格中。 

  表中有些数字已经显露出来,还有些用?*代替。 

  请你计算出和 所代表的数字。并把 所代表的数字作为本题答案提交。

答案是一个整数,请通过浏览器直接提交该数字。

注意:不要提交解答过程,或其它辅助说明类的内容。

解题思路:1、直接用解答,先从第一行和第一列开始筛选,第一行的两个空只能是23,而第一列两个空只能是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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值