| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 498 人关注过本帖
标题:[讨论][求助]关于幻方的一道题
只看楼主 加入收藏
blueboy82006
Rank: 5Rank: 5
来 自:幻想世界
等 级:贵宾
威 望:16
帖 子:1227
专家分:57
注 册:2007-7-23
结帖率:0
收藏
 问题点数:0 回复次数:3 
[讨论][求助]关于幻方的一道题
把1--16填入一个4*4的方阵中,使相邻四数的和为34(包括两对角线)。怎么编程输出所有可能的
情况?
我想了几天了,编的程序越弄越复杂,大家帮忙看看怎么弄比较好啊?
2007-08-09 08:28
blueboy82006
Rank: 5Rank: 5
来 自:幻想世界
等 级:贵宾
威 望:16
帖 子:1227
专家分:57
注 册:2007-7-23
收藏
得分:0 
记得在哪见过类似的贴,找不到了!

2007-08-09 08:30
blueboy82006
Rank: 5Rank: 5
来 自:幻想世界
等 级:贵宾
威 望:16
帖 子:1227
专家分:57
注 册:2007-7-23
收藏
得分:0 

我编了一个简陋的3*3的程序:
// 一个3*3的幻方的程序!

#include<iostream>
#include<algorithm>
using namespace std;

const N=3;
const M=15;

bool Row(int A[N][N]);
bool File(int B[N][N]);
bool Bias(int C[N][N]);

void main()
{
int A[N][N];
int a[N*N]={1,2,3,4,5,6,7,8,9}; //9个数的全排列!!!!
while(next_permutation(a,a+N*N))
{//----------------------------------------------------begin!!!!!!!!!!!!
for(int i(0);i<N;i++)

for(int j(0);j<N;j++)
{
A[i][j]=a[i*(N-1)+(i+j)];

if((i*(N-1)+(i+j)+1)%(N*N)==0)
{
if(Row(A) && File(A) && Bias(A))
{
for(int i(0);i<N;i++)
for(int j(0);j<N;j++)
{
cout<<A[i][j]<<" ";
if(j==N-1)
cout<<endl;
}
cout<<endl;
cout<<endl;

}

}
}
}//-----------------------------------------------------end!!!!!!!!!!!
cout<<endl<<"查找结束!"<<endl;



}

///////////////////////////////////////////////////////////////////////////////////////////
bool Row(int A[N][N]) //检验行满足要求!
{
int x(1);
int Sum1[N]={0,0,0};
for(int i(0);i<N;i++)
{
for(int j(0);j<N;j++)
Sum1[i]+=A[i][j];
if(Sum1[i]!=M)
{
x=0;
break;
}
}
if(x)
return true;
else
return false;
}

bool File(int B[N][N]) //检验列满足要求!
{
int x=1;
int Sum2[N]={0,0,0};
for(int i(0);i<N;i++)
{
for(int j(0);j<N;j++)
Sum2[i]+=B[j][i];
if(Sum2[i]!=M)
{
x=0;
break;
}
}
if(x)
return true;
else
return false;
}

bool Bias(int C[N][N]) //检验对角满足要求!
{
int a(0),b(0);
for(int i(0);i<N;i++)
{
a+=C[i][i];
b+=C[i][N-1-i];
}
if(a==M && b==M)
return true;
else
return false;
}
///////////////////////////////////////////////////////////////////////////////////////
问题是:用此方法编4*4时,不能执行了!
还请高手看看,指导一下啊
谢了!


2007-08-09 09:29
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
都是有法可行的,基数阶幻方比较好实现,就一直按左上(右上)排列即可。

偶数阶就比较麻烦了,似乎是分两种情况,你去搜索下找找方法吧。
我觉得没多大意思,看了方法来做,最多就是个文字描述的编码!

Fight  to win  or  die...
2007-08-09 11:16
快速回复:[讨论][求助]关于幻方的一道题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027155 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved