帮忙用C语言做个题,100分了
求(2n+1)平方的魔方阵生成算法,魔方阵是指一个从1到2n+1的平方的数 排列在一个(2n+1)x(2n+1)的矩阵中,其中每行、每列以及对角线的和都相等。 数独问题的算法:即1到9九个数排在一个9x9的格内,要求每行、每列的数字都不相同,要求至少生成一个解,如果能够求出全部解及其个数更好。
1。魔方阵源程序 #define MAX 15 #include main() { int n; int m=1; int i,j; int a[MAX][MAX]; clrscr(); scanf("%d",&n); i=0,j=(n+1)/2-1; while(m1) i=i+2,j=j-1; if(i(n-1)) j=j-n; } for(i=0;i #include typedef struct _grid99 { int value[9][9]; char disp[9][9]; } grid99; char x_status[9][9]; char y_status[9][9]; char z_status[9][9]; typedef struct _list9 { int value[9]; char disp[9]; } list9; list9 l; void print(grid99 * g) { int i,j; for(i=0; idisp[i][j]); } printf("\n"); } printf("\n"); } int check(grid99 * g) { int i,j,x,y, value; for(i=0; ivalue[i][j]; } if (value!=511) { return -1; } value=0; for(j=0; jvalue[j][i]; } if (value!=511) { return -1; } } for(i=0;ivalue[i*3+x][j*3+y]; } } if (value!=511) { return -1; } } } print(g); return 0; } int f(int a_n) { int i, r=1; for(i=1;i=81) { printf("level>=81"); return; } x=level/9; y=level%9; z=(int)(x/3)*3+(int)(y/3); for(i=0;ivalue[x][y]=l。
value[i]; g->disp[x][y]=l。disp[i]; x_status[x][i]='N'; y_status[y][i]='N'; z_status[z][i]='N'; if(level==80) { check(g); } else { find(g, level+1); } id=g->disp[x][y]-0x30-1; x_status[x][id]='Y'; y_status[y][id]='Y'; z_status[z][id]='Y'; g->value[x][y]=0; g->disp[x][y]=0x30; } } } main() { int i,j,k; grid99 g; for(i=0; i<9; i++) { l。
value[i]=f(i); l。disp[i]=i+0x30+1; //printf("%c ", l。disp[i]); //printf("%d ", l。value[i]); for(j=0; j<9; j++) { g。
value[i][j]=0; g。disp[i][j]=0x30; //printf("%c ", g。disp[i][j]); //printf("%d ", g。
value[i][j]); } for(k=0;k<9;k++) { x_status[i][k]='Y'; y_status[i][k]='Y'; z_status[i][k]='Y'; } } find(&g,0); } void main() { int i,j,tmp; int a[9][9]; int row=9,line=9; for(i=0;i
这个程序可以输出任意组合的魔方~ #include void main() { int a[32][32],i,j,k,p,n; p=1; while(p==1) { printf("Enter n(n=1~25)"); scanf("%d",&n); if((n!=0)&&(nn)) { i=i+2; j=j-1; } else { if(in) j=1; } if(a[i][j]==0) a[i][j]=k; else { i=i+2; j=j-1; a[i][j]=k; } } for(i=1;i<=n;i++) { for(j=1;j<=n;j++) printf("%d ",a[i][j]); printf("\n"); } }
第一种: #include void main() { int a[32][32],i,j,k,p,n; p=1; while(p==1) { printf("Enter n(n=1~25)"); scanf("%d",&n); if((n!=0)&&(nn)) { i=i+2; j=j-1; } else { if(in) j=1; } if(a[i][j]==0) a[i][j]=k; else { i=i+2; j=j-1; a[i][j]=k; } } for(i=1;i #define N 3 int fun(int (*a)[N]) { int i,j,m1,m2,row,colum; m1=m2=0; for(i=0; i0及vc++6。0测试通过"!。
答:详情>>
答:清华大学出版的c语言教程详情>>
问:请教哈!!请教哈!!新年好!我嘛,是软件工程的学生,现在学C++,但是其他的一些...
答:新年好!首先,你必须了解计算机的组成和结构以及操作系统的运作原理,这是基础 如果你想学习开发多线程、WINDOWS应用、动态链接库、WINDOWS组件的话,建议...详情>>