填入0~9的数字。要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)
一共有多少种可能的填数方案?
请填写表示方案数目的整数。
(左右、上下、对角都算相邻)
一共有多少种可能的填数方案?
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
#include<stdio.h>
#include<stdlib.h>
int arr[10];//具体的填数
int a[10][5] = {
{-1},//0
{0,-1},//1
{1,-1},//2
{0,-1},//3
{0,1,3,-1},//4
{0,1,2,4,-1},//5
{1,2,5,-1},//6
{3,4,-1},//7
{3,4,5,7,-1},//8
{4,5,6,8,-1}//9
//这个需要注意,很容易出错
};
int isok(int index)
{
for(int i=0;i < index;i++)//排除相同的数字
{
/*for(int j=0;j < 5;j++)
if(arr[i] == arr[a[i][j]] || arr[a[i][j]]==-1)
return 0; ----------自己的问题代码*/
if(arr[index] == arr[i])
return 0;
}
int j=0;
int ab;
while(a[index][j] != -1)
{
if(abs(arr[a[index][j]] - arr[index]) <= 1 )//排除相邻的数字
return 0;
j++;
}
}
int main()
{
int lenth=0;
for(arr[0] = 0;arr[0] < 10;arr[0]++)
{
if(!isok(0)) continue;
for(arr[1] = 0;arr[1] < 10;arr[01]++)
{
if(!isok(1)) continue;
for(arr[2] = 0;arr[2] < 10;arr[2]++)
{
if(!isok(2)) continue;
for(arr[3] = 0;arr[3] < 10;arr[3]++)
{
if(!isok(3)) continue;
for(arr[4] = 0;arr[4] < 10;arr[4]++)
{
if(!isok(4)) continue;
for(arr[5] = 0;arr[5] < 10;arr[5]++)
{
if(!isok(5)) continue;
for(arr[6] = 0;arr[6] < 10;arr[6]++)
{
if(!isok(6)) continue;
for(arr[7] = 0;arr[7] < 10;arr[7]++)
{
if(!isok(7)) continue;
for(arr[8] = 0;arr[8] < 10;arr[8]++)
{
if(!isok(8)) continue;
for(arr[9] = 0;arr[9] < 10;arr[9]++)
{
if(!isok(9)) continue;
lenth++;
}
}
}
}
}
}
}
}
}
}
printf("%d",lenth);
}
- 这是一种方法,还有其他方法以后再补充
- 利用二维数组来代表相邻的数,贴一下亮哥的讲解