| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 513 人关注过本帖
标题:[求助]格子排序问题
只看楼主 加入收藏
dvd_85
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-7-5
收藏
 问题点数:0 回复次数:0 
[求助]格子排序问题

格子排数问题
例如:
1 2 5
4 3 8
7 10 9
从整数1至10中任取九个不同的数,填入一个3*3的格子中,使所有左右相邻和上下相邻的两个格子中的数之和是素数(质数)。

程序
int i,j;
main()
{int su(int x,int y);
void jia();
void jian();
int q=0,u=0,top=0,k,d,e,m,c;
int b[10],a[3][3];

i=0;j=0;b[0]=b[1]=0;c=0;

while(top<=9)
{d=1;
if(i==0)u=0;
else u=a[i-1][j];
if(j==0)q=0;
else q=a[i][j-1];


for(k=1;k<=10;k++)
{e=0;
for(m=0;m<=top;m++)
{if((k==b[m])||(k==c))
{e=1;}}
if(e==1)continue;
if(su(q,k)==0&&su(u,k)==0)
{top++;
b[top]=k;a[i][j]=k;
jia();d=0;}}
if(d==1)
{c=b[top];b[top]=b[--top];
jian();}}

for(i=0;i<=2;i++)
{for(j=0;j<=2;j++)
printf("%3d",a[i][j]);
printf("\n");}}
int su(int x,int y)
{int m,n,u=0;
if(x==0)
return(0);
m=x+y;
for(n=2;n<m;n++)
{if(m%n==0)
{u=1;break;}}
if(u==1)
return(0);
if(u==0)
return(1);}
void jia()
{ if((j==2)&&(i<=1))
{i++;j=0;}
if((j==0)||(j==1))
j++;}
void jian()
{ if(j==0)
{j=2;i--;}
if((j==1)||(j==2))
j--;}
用i,j代表全局变量,e,d是逻辑判断用的,u代表
a[i][j]的上一位,q代表a[i][j]的左边那一位。
su(int x,int y)意思为判断两数相加是否为素数
b[]数组可以代表一个栈,按从上往下,从左而右的
顺序找,找到则放进b[]数组里,也用jia()函数把
a[i][j]进一位,找不到则b[]数组后退一位
同时a[i][j]也后退一位。

搜索更多相关主题的帖子: 格子 
2006-07-05 10:19
快速回复:[求助]格子排序问题
数据加载中...
 
   



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

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