當前位置:首頁 » 編程語言 » c語言編寫九宮格
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言編寫九宮格

發布時間: 2022-05-14 05:51:00

⑴ 大一c語言字元串九宮格輸入法

給出的參考並沒判斷每個字元,只判斷了空格後1個位置不是數字的情況哈,懶了


#include<stdio.h>
#include<string.h>

intmain()
{
//儲存九宮格的字元串指針數組
char*ninepalace[10]={"0","1,.?!","2ABC","3DEF","4GHI",
"5JKL","6MNO","7PQRS","8TUV","9WXYZ"};

//從鍵盤獲取輸入
charbuf[100]={0};
gets_s(buf,sizeof(buf));//允許輸入空格

//解析輸入並輸出
char*child=buf,*pos=buf,*tmp=NULL;
intnumber=0,len=0;
do
{
pos=strchr(child,'');//尋找當前字元串第一個空格的位置"ABC"
if(pos!=NULL)
{
*pos='';//將空格置零,原字元串分成兩個字串"ABC"
}

number=child[0]-'0';//獲取第一個字串的數字
if(number>=0&&number<=9)//過濾非法字元
{
len=strlen(child);//獲取第一個字串的長度,即數字次數
tmp=ninepalace[number];//根據數字,獲取九宮格對應的字元串
putchar(tmp[(len-1)%strlen(tmp)]);//數字次數-1%tmp的長度,定位輸出字元在tmp的位置
}

if(pos!=NULL)
{
child=pos+1;//將child指向第二個字串"BC",循環
}

}while(pos!=NULL);

printf(" ");
getchar();
return0;
}

⑵ 81格的九宮格,用c語言編程,求助

#include"stdio.h"
//定義棧的最大長度
#defineMAXSTACKLENGTH81
//待求解的九宮格矩陣,空白位置用0表示
intjiuGongArray[][9]={{0,0,0,0,4,0,0,3,2},
{4,0,0,0,0,1,0,0,0},
{5,3,0,6,0,0,0,0,7},
{3,0,0,5,1,0,7,0,0},
{0,0,5,0,3,0,2,0,0},
{0,0,9,0,7,4,0,0,3},
{1,0,0,0,0,9,0,4,6},
{0,0,0,1,0,0,0,0,9},
{8,9,0,0,6,0,0,0,0}};
//空缺數據組成的矩陣,共有九個九宮格單元,從左到右,然後從上到下編號為0-8;
//例如:第一個九宮格單元空缺的數字為1,4,8,則矩陣dataNeedToBeInsert的第一行
//為{1,0,0,4,0,0,0,8,0}
intdataNeedToBeInsert[][9]={{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9}};
//定義棧單元的結構
typedefstruct
{
intxPosition;
intyPosition;
intjiuGongGePosition;
intnum;
}node;
//定義棧數組
nodestack[MAXSTACKLENGTH];
//由給定的九宮格矩陣,查找空缺的數據
voidFindDataToBeInsert(void)
{
inti,j;
intx,y;
for(i=0;i<9;i++)
for(j=0;j<9;j++)
{
if(jiuGongArray[i][j]!=0)
{
x=(i/3)*3+j/3;
y=jiuGongArray[i][j]-1;
dataNeedToBeInsert[x][y]=0;
}
}
}
//輸出m*n的矩陣
voidPrintArray(int*ptr,intm,intn)
{
inti,j;
intdata;
inttemp;
temp=n-1;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{
data=*(ptr+i*n+j);
printf("%d",data);
if(j==temp)
{
printf(" ");
}
}
}
//核實是否滿足結束條件
intCheckEnd(void)
{
inti,j,sum;
for(i=0;i<9;i++)
{
sum=0;
for(j=0;j<9;j++)
{
sum+=jiuGongArray[i][j];
}
if(sum!=45)
{
return-1;
}
}
for(j=0;j<9;j++)
{
sum=0;
for(i=0;i<9;i++)
{
sum+=jiuGongArray[i][j];
}
if(sum!=45)
{
return-1;
}
}
return0;
}
//從矩陣dataNeedToBeInsert[][]中查找下一個數據
intFindNextData(intm,intn,int*xPosition,int*yPosition)
{
intstate=0;
if(n>8)
{
n=0;
m++;
}
if(m>8)
{
state=CheckEnd();
if(state!=0)
return-1;
else
return1;
}
while(dataNeedToBeInsert[m][n]==0)
{
if(n<8)
n++;
else
{
n=0;
m++;
if(m>8)
{
state=CheckEnd();
if(state!=0)
return-1;
else
return1;
}
}
}
*xPosition=m;
*yPosition=n;
return0;
}
//核實元素對應的行和列是否有相同的數字
intCheckLine(intm,intn,intnum)
{
inti;
for(i=0;i<9;i++)
{
if(jiuGongArray[m][i]==num)
return-1;
}
for(i=0;i<9;i++)
{
if(jiuGongArray[i][n]==num)
return-1;
}
return0;
}
//核實是否滿足入棧條件
intCheckCanPush(intm,intn,int*position)
{
intstart=*position;
inti,temp1,temp2,temp3,temp4;
intnum;

temp1=(m/3)*3;
temp2=(m%3)*3;
num=dataNeedToBeInsert[m][n];

for(i=start;i<10;i++)
{
temp3=temp1+(start-1)/3;
temp4=temp2+(start-1)%3;

if(jiuGongArray[temp3][temp4]!=0)
{
start++;
continue;
}
if(CheckLine(temp3,temp4,num)!=0)
{
start++;
continue;
}
else
{
*position=start;
return0;
}
}

return-1;
}
//入棧
intPush(int*top,intxPosition,intyPosition,intjiuGongGePosition,intnum)
{
if(*top>=MAXSTACKLENGTH)
{
printf("Reachstacktop! ");
return-1;
}
else
{
(*top)++;
stack[*top].xPosition=xPosition;
stack[*top].yPosition=yPosition;
stack[*top].jiuGongGePosition=jiuGongGePosition;
stack[*top].num=num;
return0;
}
}
//出棧
intPop(int*top,int*xPosition,int*yPosition,int*jiuGongGePosition,int*num)
{
if(*top==-1)
{
printf("Reachstackbottom! ");
return-1;
}
else
{
*xPosition=stack[*top].xPosition;
*yPosition=stack[*top].yPosition;
*jiuGongGePosition=stack[*top].jiuGongGePosition;
*num=stack[*top].num;
(*top)--;
return0;
}
}
voidmain()
{
intend=0;
intline=0;
introw=0;
inttop=-1;
intpositionInUnitArray=1;
intstate=0;
intnum;

FindDataToBeInsert();

PrintArray(jiuGongArray,9,9);
while(end!=1)
{
state=FindNextData(line,row,&line,&row);
if(state==0)
{
state=CheckCanPush(line,row,&positionInUnitArray);
if(state==0)
{
state=Push(&top,line,row,positionInUnitArray,dataNeedToBeInsert[line][row]);
if(state==0)
{
jiuGongArray[(line/3)*3+(positionInUnitArray-1)/3][(line%3)*3+(positionInUnitArray-1)%3]=dataNeedToBeInsert[line][row];
row++;
positionInUnitArray=1;
}
else
end=1;
}
else
{
state=Pop(&top,&line,&row,&positionInUnitArray,&num);
if(state==0)
{
jiuGongArray[(line/3)*3+(positionInUnitArray-1)/3][(line%3)*3+(positionInUnitArray-1)%3]=0;
positionInUnitArray++;
}
else
end=1;
}
}
elseif(state==1)
{
printf(" ");
PrintArray(jiuGongArray,9,9);
end=1;
}
else
{
printf("Someerroroccur! ");
end=1;
}
}
}

⑶ 求用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;i<9;i++)
{
for(j=0;j<9;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].num>9,則k-1,否則k+1*/
for(k=0;k<en;)
{
++b[k].num;
i=b[k].line;
j=b[k].row;
a[i][j]=b[k].num;
n=0;
while(n<9&&b[k].num<=9)
{
if(n==i)
{
for(y=0;y<9;y++)
{
if(y==j)
continue;
if(a[n][y]==a[i][j])
flag=1;
}
}
else
if(n==j)
{
for(y=0;y<9;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(;x<p+3;x++)
{
for(;y<q+3;y++)
{
if(x==i&&y==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].num>9)
{
a[i][j]=b[k].num=0;
k--;
if(k<0)
{
printf("error!\r\n");
return
-1;
}
}
else
k++;
}
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
printf("%d",a[i][j]);
}
printf("\r\n");
}
return
1;
}

⑷ 九九宮格有多少種求用c語言編寫代碼顯示!註:要求顯示總的個數!

首先貼效果:
initial array is :
1 2 3
4 5 6
7 8 9

2 7 6
9 5 1
4 3 8

2 9 4
7 5 3
6 1 8

4 3 8
9 5 1
2 7 6

4 9 2
3 5 7
8 1 6

6 1 8
7 5 3
2 9 4

6 7 2
1 5 9
8 3 4

8 3 4
1 5 9
6 7 2

8 1 6
3 5 7
4 9 2

total solving :8

不能構成的情況:
initial array is :
0 9 4
7 5 3
6 1 8

The number you input can not be jiuGongGe!

再貼源代碼:
#include <stdio.h>
#include "conio.h"

long n = 0;

void swap(int *a, int *b)
{
int m;
m = *a;
*a = *b;
*b = m;
}

int isJiuGongGe(int array[])
{
int sum=(array[0]+array[1]+array[2]);
if(sum==(array[3]+array[4]+array[5])&&sum==(array[6]+array[7]+array[8])&&
sum==(array[0]+array[4]+array[8])&&sum==(array[2]+array[4]+array[6])&&
sum==(array[0]+array[3]+array[6])&&
sum==(array[1]+array[4]+array[7])&&
sum==(array[2]+array[5]+array[8]))
return 1;
else
return 0;
}

void printfArray(int array[])
{
int i=0;
for(i=0;i<9;i++)
{
printf("%2d",array[i]);
if((i+1)%3==0)
{
printf("\n");
}
}
printf("\n");
}

void findAllJiugongge(int list[], int k, int m)
{
int i;
if(k > m)
{
if(isJiuGongGe(list))
{
printfArray(list);
n++;
}

}
else
{
for(i = k; i <= m; i++)
{
swap(&list[k], &list[i]);
findAllJiugongge(list, k + 1, m);
swap(&list[k], &list[i]);
}
}
}

int main()
{
int list[] = {0, 9, 4, 7, 5,3,6,1,8};
int i=0;
/*for(i=0;i<9;i++)
{
scanf("%d",&array[i]);
}*/
printf("initial array is :\n");
printfArray(list);
findAllJiugongge(list, 0, 8);
if(n>0)
{
printf("total solving :%ld\n", n);
}
else
{
printf(" The number you input can not be jiuGongGe!\n");
}

getch();
}

再說說思路:
1、 9個數放到一個9個元素的數組中。
2、對9個數進行全排列,沒排列一種可能都判斷下是否滿足九宮格情況。滿足就輸出。

3、提高篇:這個方式是最直觀的一種方法,最好懂的一種方法。
當然也可以用深度搜索,寬度搜索或者是A*演算法搜索出所有的解。但是沒有多大的意義,在游戲開發中到可以使用。尤其是8數碼問題、拼圖、華容道等難題中。

4、方便測試,我直接把數組賦值了。你要自己輸入的話,注釋那段代碼用起來就可以了。
樓主好運!

⑸ C語言編程輸出九宮格

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
main()
{
#define n 3
int a[n][n]={0},i,sum=0,j;
i=0;j=n/2;
a[0][j]=++sum;
while(sum<n*n+1)
{i--;j++;
if(i<0&&j>=n)
{i=i+2;j--;}
else
{if(i<0)
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;i<n;i++)
{for(j=0;j<n;j++)
printf("%5d",a[i][j]);
printf("\n");}
getch();
}

⑹ C語言中關於九宮格的演算法

你想達到什麼目的?問題具體一些!

⑺ 求,C語言3*3九宮格怎麼寫

#include<stdio.h>
intmain()
{
inti,j,a[3][3];
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",&a[i][j]);
}
}//這個是要你自己輸入的,數字之間用空格隔開,你也可以在定義數組時直接賦值
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("%d",a[i][j]);
}
printf(" ");
}
}

⑻ c語言 九宮格

#include<stdio.h>
#include<malloc.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((m>0)&&(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;i<m;i++)
{
for(j=0;j<m;j++)
printf("%6d",G[i][j]);
printf("\n");
}
}
else
printf("The number you inputed is ERROR!!!");
system("pause");
}
可以接受15以內的任意魔方 你的九宮格按照這個程序輸出是這樣的:

⑼ C語言 簡化版九宮格

#include<stdio.h>

#defineN9

intcheck_row(inta[N][N],intr)
{
inti,j;
for(i=0;i<N;i++)
for(j=i+1;j<N;j++)
if(a[r][i]==a[r][j])
return0;
return1;
}
intcheck_column(inta[N][N],intc)
{
inti,j;
for(i=0;i<N;i++)
for(j=i+1;j<N;j++)
if(a[i][c]==a[j][c])
return0;
return1;
}

voidget_total(inta[N][N],int*total1,int*total2)
{
inti;
for(i=0;i<N;i++)
{
*total1+=a[i][i];
*total2+=a[i][N-i-1];
}
}

intmain()
{
inta[N][N],i,j,yes=1;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
scanf("%d",&a[i][j]);

for(i=0;i<N;i++)
{
if(!check_row(a,i)||!check_column(a,i))
{
yes=0;
break;
}
}
printf("%s ",yes?"YES":"NO");
inttotal1=0,total2=0;
get_total(a,&total1,&total2);
printf("%d%d ",total1>total2?total1:total2,total1>total2?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