格子排数问题(我程序作出为什么结果是错误的)
格子排数问题 例如: 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]也后退一位。
其他的没有仔细看,下面两个函数均有问题 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的值不可能为这两个) 没有全改,大概写了一个,详见源码。
。
答:质数,反例1+3=4 合数,反例1+2=3 奇数,反例1+3=4 偶数,反例1+2=3 所以只能是,整数,正数,自然数,实数,有理数,正整数,详情>>
问:挺简单的一C函数,不过我是初学者,暂时还不会写,请好心人多多帮忙!
答:int mystrlen(char *str) { int n = 0; while (*str) { n++; str++;} return n; } voi...详情>>