本文目录一览:
c语言 九宫格
#includestdio.h
#includemalloc.h
int N=15;
int main()
{
int i,j,k,m,n;
int G[N][N];
printf("Input the odd number(number=15) you want !\n");
scanf("%d",m);
if((m0)(m%2))
{
printf("Your intput number is %d\n",m);
n=m*m;
j=0;
k=m/2;
for(i=1;i=n;i++)
{
G[j][k]=i;
if(i%m==0)
if(j==m-1)
j=0;
else
j++;
else
{
if(j==0)
j=m-1;
else
j--;
if(k==m-1)
k=0;
else
k++;
}
}
for(i=0;im;i++)
{
for(j=0;jm;j++)
printf("%6d",G[i][j]);
printf("\n");
}
}
else
printf("The number you inputed is ERROR!!!");
system("pause");
}
可以接受15以内的任意魔方 你的九宫格按照这个程序输出是这样的:
C语言 简化版九宫格
#include stdio.h
#define N 9
int check_row( int a[N][N], int r )
{
int i,j;
for( i=0; iN; i++ )
for( j=i+1; jN; j++ )
if ( a[r][i] == a[r][j] )
return 0;
return 1;
}
int check_column( int a[N][N], int c )
{
int i,j;
for( i=0; iN; i++ )
for( j=i+1; jN; j++ )
if ( a[i][c] == a[j][c] )
return 0;
return 1;
}
void get_total( int a[N][N], int *total1, int *total2 )
{
int i;
for( i=0; iN; i++ )
{
*total1 += a[i][i];
*total2 += a[i][N-i-1];
}
}
int main()
{
int a[N][N], i, j, yes=1;
for( i=0; iN; i++ )
for( j=0; jN; j++ )
scanf( "%d", a[i][j] );
for( i=0; iN; i++ )
{
if ( !check_row( a, i ) || !check_column( a, i ) )
{
yes = 0;
break;
}
}
printf( "%s\n", yes ? "YES" : "NO" );
int total1 = 0, total2 = 0;
get_total( a, total1, total2 );
printf( "%d %d\n", total1total2?total1:total2, total1total2?total2:total1 );
}
1 2 3 4 5 6 7 8 9
2 3 4 5 6 7 8 9 1
3 4 5 6 7 8 9 1 2
4 5 6 7 8 9 1 2 3
5 6 7 8 9 1 2 3 4
6 7 8 9 1 2 3 4 5
7 8 9 1 2 3 4 5 6
8 9 1 2 3 4 5 6 7
9 1 2 3 4 5 6 7 8
求九宫问题程序(C语言实现)
【转】
/*九宫图算法说明:根据分析,九宫图中间一位一定是5,另外关于中间位置
对称的每两个数字相加等于10,所以对于一个九宫图只通过其相邻位置的数
字就能计算出其他所有位置的数字,而且相邻位置的数字必然一个比5大,一
个比5小
算法设计思想:先根据选取规则,从剩下八个数里面选一大一小,再使用目
标函数检测选取是否正确,如果正确则打印出,否则重新选取,选数的过程
使用回溯法*/
#includestdio.h
int place(int*);
void main(void){/*九宫图算法*/
int a[9]={1,2,3,4,5,6,7,8,9};
int b[9]={0};/*表示数字的位置状态*/
int j,k,i;
for(k=0;k=3;k++){/*对于所有比5小的数*/
b[1]=a[k];/*选一比5小的数放到第一行第二列*/
for(j=8;j=5;j--){/*对于所有比5大的数*/
if(k!=(8-j)){/*不选择前面已选小数所对应的大数*/
b[0]=a[j];/*选一比5大的数放到第一行第一列*/
if(place(b)){/*若得到一解,则打印出*/
printf("\n 九宫图\n\n");
for(i=0;i=8;i++){
printf(" %d ",b[i]);
if((i+1)%3==0){
printf("\n\n\n");
}
}
getch();
exit(0);
}
} /* 回溯到上一级*/
} /*回溯到根一级 */
}
}
int place(int*p){ /*计算出其他位置的数字并检测是否为所求的解*/
p[2]=15-p[0]-p[1];
p[4]=5;
p[6]=10-p[2];
p[3]=15-p[0]-p[6];
p[5]=10-p[3];
p[7]=10-p[1];
p[8]=10-p[0];
if(p[2]+p[5]+p[8]==p[6]+p[7]+p[8]){/*其他行和列已通过计算检测了,只有第三行,第三列未检测*/
return(1);
}
else{
return(0);
}
}
【转】
///////////////////////////////////////
// 九宫图算法;
//////////////////////////////////////
#includesio.h
#includetime.h
#includeslib.h
//////////////////////////////////
//// the function defination
//////////////////////////////////
void create(int [][3]);
void show(int [][3]);
void set_value(int [][3]);
void aim_get(int [][3]);
void target(int [][3]);
void judge_x1(int [][3]);
void judge_x2(int [][3]);
void judge_x3(int [][3]);
void judge_x4(int [][3]);
void judge_x5(int [][3]);
void shift_all(int [][3]);
void shift_low_six(int [][3]);
void anti_shift_all(int [][3]);
void shift_low_four(int [][3]);
void last_shift(int [][3]);
void set_x5(int [][3]);
///////////////////////////////////////
////// the main function body ////
////////////////////////////////////////
main()
{
srand(time(NULL));
int cDiagram[3][3];
create(cDiagram); /////// creat the new array ,set the value are 10;
set_value(cDiagram);
//last_shift(cDiagram);
return 0;
}
///////////////////////////////////////
/// 建立一个3*3数组,初值都设为10;//
//////////////////////////////////////
void create(int array[][3])
{
printf("\n\n***********************************\n\n");
printf("九宫图算法实现过程\n\n");
printf("***********************************\n\n");
int line;
int row;
for(line=0;line3;line )
{
for(row=0;row3;row )
{
array[line][row]=10;
}
}
// set_value(array);
//show(array);
}
/////////////////////////////////////////
/// 显示数组状态 ////
////////////////////////////////////////
void show(int array[][3])
{
for(int i=0;i3;i )
{
for(int j=0;j3;j )
{
printf("=",array[i][j]);
}
printf("\n\n");
}
}
///////////////////////////////
/// 产生数组的初始状态 ///////
///////////////////////////////
void set_value(int array[][3])
{
int i=0;
int rand_num_line;
int rand_num_row;
printf(" \n\n九宫图的初始值为:\n\n");
while(i=8)
{
rand_num_line=rand()%3;
rand_num_row=rand()%3;
if(array[rand_num_line][rand_num_row]!=i array[rand_num_line][rand_num_row]==10)
{
array[rand_num_line][rand_num_row]=i;
i;
}
}
show(array);
//printf(" let's begin!!\n");
aim_get(array);
}
////////////////////////////////////////////////////////
//// judge the initial array get the target or no ! ///
//////////////////////////////////////////////////////////
void aim_get(int array[][3])
{
int aim[3][3]={{1,2,3},{8,0,4},{7,6,5}};
int line;
int row;
int judge=0;
for(line=0;line3;line )
{
for(row=0;row3;row )
{
if(array[line][row]!=aim[line][row])
{
judge=1;
}
}
}
if(judge==1)
{
judge_x1(array);
}
else
{
target(array);
}
}
/////////////////////////////////////
/////// the target diagram //////////
/////////////////////////////////////
void target(int array[][3])
{
printf("\n\n the last diagram is :\n");
show(array);
}
////////////////////////////////////
///judge the x1 is 1 or no! ///////
////////////////////////////////////
void judge_x1(int array[3][3])
{
//int x1=1;
int temp;
//printf(" \n\n\n the array[0][2]=%d\n\n",array[0][2]);
if(array[0][2]!=1 array[0][2]!=0) // x3!=1 || x3!=0;
{
while(array[0][0]!=1)
{
//printf("i am here!!1");
temp=array[0][0];
array[0][0]=array[0][1];
array[0][1]=array[1][1];
array[1][1]=array[1][2];
array[1][2]=array[2][2];
array[2][2]=array[2][1];
array[2][1]=array[2][0];
array[2][0]=array[1][0];
array[1][0]=temp;
}
}
else
{
if(array[0][2]==0) // x3==0;
{
// printf("\n\n array[0][2]=0\n\n");
temp=array[0][2];
array[0][1]=array[0][2];
array[0][2]=temp;
judge_x1(array);
goto tt;
}
else /// x3==1;
{ //printf("\n\narray[0][2] should is 1, %d",array[0][2]);
if(array[1][1]==0) //// x0==0;
{
temp=array[0][1];
array[0][1]=array[1][1];
array[1][1]=temp;
judge_x1(array);
}
else //// x3==1 x0!=0;
{
shift_all(array);
judge_x1(array);
}
}
}
printf(" 确定了X1位置后,九宫图为:\n");
谁能编一个解决九宫数独的程序(用C语言)
#include stdio.h
typedef struct
{
int line;
int row;
int num;
}Node;
int main()
{
/*
int a[9][9]={
{4,0,3,6,0,0,0,0,0},
{0,0,0,0,0,1,0,2,4},
{0,1,0,0,4,0,5,0,0},
{0,0,0,9,0,4,0,6,0},
{3,0,2,0,0,0,4,0,9},
{0,7,4,1,0,3,0,0,0},
{0,0,1,0,9,0,0,4,0},
{2,4,0,3,0,0,0,0,0},
{0,0,0,4,0,8,2,0,7}};
*/
int a[9][9]={
{0,0,0,8,0,0,0,6,0},
{8,7,0,0,0,0,0,0,0},
{2,9,0,0,4,1,0,0,5},
{0,0,5,7,0,0,0,0,9},
{0,2,0,0,0,0,0,1,0},
{9,0,0,0,0,4,3,0,0},
{7,0,0,6,1,0,0,9,8},
{0,0,0,0,0,0,0,5,2},
{0,6,0,0,0,9,0,0,0}};
/*
int a[9][9]={
{0,2,0,0,6,0,0,0,0},
{0,9,0,4,0,5,1,3,0},
{0,0,8,7,0,0,0,0,5},
{6,0,0,3,0,0,4,0,0},
{0,0,0,9,0,6,0,0,0},
{0,0,7,0,0,1,0,0,3},
{4,0,0,0,0,7,3,0,0},
{0,8,5,2,0,4,0,7,0},
{0,0,0,0,9,0,0,1,0}};
*/
/*
int a[9][9]={
{0,0,3,0,2,0,0,0,6},
{0,0,2,0,9,0,0,0,4},
{7,0,0,8,0,0,2,0,3},
{0,8,0,0,7,0,5,0,0},
{0,7,0,1,0,6,0,3,0},
{0,0,0,2,0,0,0,9,0},
{4,0,6,0,0,8,0,0,5},
{6,0,0,0,4,0,3,0,0},
{9,0,0,0,1,0,7,0,0}};
*/
int i,j,n,en,flag,y,k=0,x,qu,p,q;
Node b[70];
for(i=0;i9;i++)
{
for(j=0;j9;j++)
{
if(!a[i][j])
{
b[k].line=i;
b[k].row=j;
b[k].num=0;
k+=1;
}
}
}
en=k;
/*从b[0]开始试,若b[k].num9,则k-1,否则k+1*/
for(k=0;ken;)
{
++b[k].num;
i=b[k].line;
j=b[k].row;
a[i][j]=b[k].num;
n=0;
while(n9b[k].num=9)
{
if(n==i)
{
for(y=0;y9;y++)
{
if(y==j)
continue;
if(a[n][y]==a[i][j])
flag=1;
}
}
else if(n==j)
{
for(y=0;y9;y++)
{
if(y==i)
continue;
if(a[y][n]==a[i][j])
flag=1;
}
}
/*判断同一块中有没有相同值*/
qu=3*(i/3)+j/3;
switch(qu)
{
case 0:x=0;
y=0;
break;
case 1:x=0;
y=3;
break;
case 2:x=0;
y=6;
break;
case 3:x=3;
y=0;
break;
case 4:x=3;
y=3;
break;
case 5:x=3;
y=6;
break;
case 6:x=6;
y=0;
break;
case 7:x=6;
y=3;
break;
default :x=6;
y=6;
break;
}
p=x;
q=y;
for(;xp+3;x++)
{
for(;yq+3;y++)
{
if(x==iy==j)
continue;
if(a[x][y]==a[i][j])
{
flag=1;
break;
}
}
if(flag==1)
break;
}
if(flag==1)
{
a[i][j]=++b[k].num;
flag=0;
n=0;
continue;
}
n++;
}
if(b[k].num9)
{
a[i][j]=b[k].num=0;
k--;
if(k0)
{
printf("error!\r\n");
return -1;
}
}
else
k++;
}
for(i=0;i9;i++)
{
for(j=0;j9;j++)
{
printf("%d",a[i][j]);
}
printf("\r\n");
}
return 1;
}
C语言编程输出九宫格
#includestdio.h
#includestdlib.h
#includeconio.h
main()
{
#define n 3
int a[n][n]={0},i,sum=0,j;
i=0;j=n/2;
a[0][j]=++sum;
while(sumn*n+1)
{i--;j++;
if(i0j=n)
{i=i+2;j--;}
else
{if(i0)
i=n-1;
if(j=n)
j=0;
}
if(a[i][j]==0)
a[i][j]=++sum;
else
{
i=i+2;
j--;
a[i][j]=++sum;
continue;}
}
for(i=0;in;i++)
{for(j=0;jn;j++)
printf("%5d",a[i][j]);
printf("\n");}
getch();
}