省赛题目 方格填数

本文介绍了一种填数游戏的算法实现,通过递归检查确保每个数字与其相邻位置的数字不连续,使用C语言实现了一个具体的例子,并展示了如何计算所有合法填数方案的数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

填入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);
 } 


  1. 这是一种方法,还有其他方法以后再补充
  2. 利用二维数组来代表相邻的数,贴一下亮哥的讲解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值