蓝桥杯 第五届 六角填数

本文通过深度优先搜索算法解决了一个六角形内填充数字的谜题,目标是使每条直线上的数字之和相等。已知部分数字位置,求解星号位置对应的数字。

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

/*
题目描述:


    如图【1.png】所示六角形中,填入1~12的数字。 
    使得每条直线上的数字之和都相同。 
    图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少? 
请通过浏览器提交答案,不要填写多余的内容。


用的是深搜 
*/
#include <stdio.h>
int a[13],b[13]={0},c[13];
void judge(int c[])
{
	int x,y,z,w,s,t;
	x=c[1]+c[3]+c[6]+c[8];
	y=c[1]+c[4]+c[7]+c[11];
	z=c[2]+c[3]+c[4]+c[5];
	w=c[2]+c[6]+c[9]+c[12];
	s=c[5]+c[7]+c[10]+c[12];
	t=c[8]+c[9]+c[10]+c[11];
	if(x==y&&x==z&&x==w&&x==s&&x==t&&y==z&&y==w&&y==s&&y==t&&z==w&&z==s&&z==t&&w==s&&w==t&&s==t)
	{
		printf("%d\n",c[6]);
	}
}
void f(int df)//df是当前我已经对第几个位置已经赋好值了 
{
	if(df==11)// 因为我已经对c[12]赋过值了且已经对b[3]进行标记 所以 从最初开始的循环 理论上是只剩下9个数字可选 
	{
		judge(c);//所以 递归出口应该是df恒等于11的时候  
		return ;
	}
	for(int j=1;j<=12;j++)
	{
		if(b[j]==1)
		{
			continue;//标记这个数字我是否已经用过 
		}
		c[df+1]=a[j];
		b[j]=1;
		f(df+1);
		b[j]=0;//一定要记得去标记 
	}
}
int main()
{
	c[1]=1;
	c[2]=8;
	c[12]=3;
	for(int i=1;i<=12;i++)
	{
		a[i]=i;
	}
	b[1]=1;
	b[8]=1;
	b[3]=1;
	f(2);
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值