当前位置:文档之家› 九宫格填数

九宫格填数

九宫格填数
15。


#include "stdio.h"
int num[10]; /*1-9的数字中填入九宫格的使用情况,1已经使用此数字,0没有用*/
int x[100][3], count=0; /*满足三个数和为15的三个数字,及个数*/
int sel[3][3]; /*填入九宫格的数字*/
main()
{
int i,j,k,l,m;
int cf=0; /*是否已经有重复的数字*/
for(i=1; i<10; i++) /*找满足三个数和为15的三个数字*/
for(j=1; j<10; j++)
for(k=1; k<10; k++)
if(i!=j && i!=k && j!=k && i+j+k==15)
{ x[count][0]=i;
x[count][1]=j;
x[count][2]=k;
count++;
}
printf("%d\n",count);
for(i=0; i<count; i++)
{
for(l=0; l<3; l++)sel[0][l]=x[i][l]; /*填入九宫格第1行*/
for(j=0; j<count; j++)
{
if(i==j)continue; /*如此组数据已填入第1行,看下一组数*/ for(l=1; l<10; l++)num[l]=0;
for(m=0; m<3; m++)num[sel[0][m]]=1;
cf=0;
for(l=0; l<3; l++)
{
sel[1][l]=x[j][l]; /*填入九宫格第2行*/
if(num[x[j][l]]!=1)num[x[j][l]]=1;
else cf=1; /*如果有重复的数字,cf=1*/
}
if(cf)continue; /*如果有重复的数字,进行下一组判断*/
for(k=0; k<count; k++)
{
if(i==k || j==k)continue; /*如此组数已填入第1、2行,看下一组*/ for(l=1; l<10; l++)num[l]=0;
for(l=0; l<2; l++)
for(m=0; m<3; m++)num[sel[l][m]]=1;
cf=0;
for(l=0; l<3; l++)
{
sel[2][l]=x[k][l]; /*填入九宫格第3行*/
if(num[x[k][l]]!=1)num[x[k][l]]=1;
else cf=1; /*如果有重复的数字,cf=1*/
}
if(cf)continue; /*如果有重复的数字,进行下一组判断*/
/*判断列和对角线和是否等于15*/
if(sel[0][0]+sel[1][0]+sel[2][0]!=15)continue;
if(sel[0][1]+sel[1][1]+sel[2][1]!=15)continue;
if(sel[0][2]+sel[1][2]+sel[2][2]!=15)continue;
if(sel[0][0]+sel[1][1]+sel[2][2]!=15)continue;
if(sel[0][2]+sel[1][1]+sel[2][0]!=15)continue;
for(l=0; l<3; l++) /*输出*/
printf("%d %d %d\n",sel[l][0],sel[l][1],sel[l][2]);
printf("\n\n");
}
} } }。

相关主题