70,020
社区成员




#include <stdio.h>
int a[9];
int choose[7]={2,3,4,5,6,7,8}; // 剩下的7个数字中逐个排列
void show();
int check(int m);
void help(int m);
int main()
{
a[0]=9;//规定第一个数字是9
a[8]=1; //规定第一个数字是1
help(1);//调用help函数一次
return 0;
}
void show() //输出证据
{
int m,n,i=0;
puts("");
for(m=0;m<3;m++)//共有三行
{
for(n=0;n<3;n++) //共有三列
printf("%d ",a[i++]);
puts("");
}
}
int check(int m) //引用check函数,检查位置大小是否符合题意
{
int up=m;
int left=m;
int row=left/3; //行是左边的除以3
int col=left%3;//列是对3去余
int n;
for(n=1;n<=8;n++)
if(m==n) ;//空
else
{
if(a[m]==a[n])
return 0;
}
while(up-3>=0)// 当下面的数字-3要大于等于0
if(a[up-3]>a[up])
up-=3;
else
return 0;
while(col-1>=0) //当行中的数字-1要大于等于0
if(a[row*3+col-1]>a[row*3+col])//判断列中的数字乘以3加上行中的数字-1是否大于该行概列
col--;
else
return 0;
return 1;
}
void help(int m)
{
int i=0;
if(m>=8)
show();
else
{
for(i=0;i<7;i++)
{
a[m]=choose[i];
if(check(m))
help(m+1);
a[m] = 0;
}
}
}