爱问知识人 爱问教育 医院库

格子排数问题(我程序作出为什么结果是错误的)

首页

格子排数问题(我程序作出为什么结果是错误的)

格子排数问题
例如:
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 15:00:31
      其他的没有仔细看,下面两个函数均有问题
    void jia()
    { if((j==2)&&(i<=1))
    {i++;j=0;}
    if((j==0)||(j==1))
    j++;}
    这里应该为
    void jia()
    {
     if((j==2)&&(i<=1))
     {i++;j=0;}
     else if((j==0)||(j==1))
     j++;
    }
    少了一个else,如果按你原来的程序,假如i为0j为2,本来应该变成i为1j为0,却成了i为1j为1
    void jian()
    { if(j==0)
    {j=2;i--;}
    if((j==1)||(j==2))
    j--;}
    同上面的程序,少了一个else,应该为
    void jian()
    { 
    if(j==0)
    {
    j=2;
    i--;
    }
    else if((j==1)||(j==2))
    j--;
    }
    另外,你写的判断素数的程序也不对,如果输入的x+y的值为1和2判断都为错误的(虽然在这个程序里面,x+y的值不可能为这两个)
    没有全改,大概写了一个,详见源码。
       。

    绯***

    2006-07-05 15:00:31

类似问题

换一换
  • C/C++ 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...
最新问答 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 173-192
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):