2016蓝桥杯C/C++A组填数字

本文探讨如何使用深度搜索算法解决一个特定的填数问题,要求填入的数字不能相邻,通过全排列函数实现解决方案计数。

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

方格填数


如下的10个格子
   +--+--+--+
   |  |  |  |
+--+--+--+--+
|  |  |  |  |
+--+--+--+--+
|  |  |  |
+--+--+--+


(如果显示有问题,也可以参看【图1.jpg】)


填入0~9的数字。要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)


一共有多少种可能的填数方案?


请填写表示方案数目的整数。

注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。


此题是一道典型的深搜题目,因为是填空题,不需要考虑效率,若用C++的库函数(next_permutation)直接写也是很方便的,用了此库函数可直接进行数次if判断就可得出结果。

首先,将原图进行拆分整合,得下图



Download as text

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include<iostream>
#include<algorithm>                   //算法头文件,包含许多十分方便的库函数(next_permutation()就在其中)
#include<cmath>				//数学头文件fabs()是绝对值的库函数
using namespace std;
int main()
{
	int a[20],sum=0;
	for(int i=0;i<10;i++)
		a[i]=i;
	//进行题目所需的判断
	do{
		if(fabs((double)(a[0]-a[1]))!=1&&fabs((double)(a[0]-a[3]))!=1&&fabs((double)(a[0]-a[4]))!=1&&fabs((double)(a[0]-a[2]))!=1)
		{
			if(fabs((double)(a[1]-a[4]))!=1&&fabs((double)(a[3]-a[1]))!=1)
			{
				if(fabs((double)(a[2]-a[3]))!=1&&fabs((double)(a[2]-a[5]))!=1&&fabs((double)(a[2]-a[6]))!=1)
				{
					if(fabs((double)(a[3]-a[4]))!=1&&fabs((double)(a[3]-a[6]))!=1&&fabs((double)(a[3]-a[7]))!=1&&fabs((double)(a[3]-a[5]))!=1)
					{
						if(fabs((double)(a[4]-a[6]))!=1&&fabs((double)(a[4]-a[7]))!=1)
						{
							if(fabs((double)(a[5]-a[6]))!=1&&fabs((double)(a[5]-a[8]))!=1&&fabs((double)(a[5]-a[9]))!=1)
							{
								if(fabs((double)(a[6]-a[7]))!=1&&fabs((double)(a[6]-a[9]))!=1&&fabs((double)(a[6]-a[8]))!=1)
								{
									if(fabs((double)(a[7]-a[9]))!=1)
									{
										if(fabs((double)(a[8]-a[9]))!=1)
											sum++;
									}
								}
							}
						}
					}
				}
			}
		}
	}while(next_permutation(a,a+10));//全排列的函数,两个参数为所需排列的数组首地址和末地址
	cout<<sum;
	return 0;
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值