您的位置:

c语言重排九宫,c语言直接选择排序

本文目录一览:

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();

}