第四届蓝桥杯决赛B组C/C++——填算式

标题:猜灯谜

A 村的元宵节灯会上有一迷题:

请猜谜 * 请猜谜 = 请边赏灯边猜

小明想,一定是每个汉字代表一个数字,不同的汉字代表不同的数字。

请你用计算机按小明的思路算一下,然后提交“请猜谜”三个字所代表的整数即可。

请严格按照格式,通过浏览器提交答案。

注意:只提交一个3位的整数,不要写其它附加内容,比如:说明性的文字。

答案:897

这题我想的大概两种方法:

  1. 暴力 6个for循环,没什么技术,就不说了
  2. dfs,这题其实比较巧妙,因为和八皇后很类似,你在脑中想象有一个6*10的格子(6行10列),每一列代表一个数字,10列分别从0-9;每一行分别代表一个汉字,只不过在搜索的时候要注意第0行第0列不能放(下标都从0开始),因为第0行代表的汉字是“请”,“请”不能是0,要不然就0开头了
#include<bits/stdc++.h>
using namespace std;
int res[6];//分别表示请,猜,迷,边,赏,灯
//请猜谜*请猜谜 = 请边赏灯边猜 
void dfs(int k)//搜索到了第k层
{
	int j;
	if(k == 7 && (res[0]*100+res[1]*10+res[2])*(res[0]*100+res[1]*10+res[2]) == 
		      (res[0]*100000+res[3]*10000+res[4]*1000+res[5]*100+res[3]*10+res[1]))
	{
		for(int i = 0;i < 6;i++)
			cout<<res[i]; 
		cout<<endl;
		return;
	}
	for(int i = 0;i < 10;i++)//i表示可取的列,也就是可取的值
	{
		for(j = 0;j < k;j++)//j表示第k行之前的数取值 
		{
			if(i==res[j])
				break;
		}
		if(k == j)
		{
			res[j] = i;
			if(res[0] == 0)
				 continue;
			dfs(k+1);
		}
	} 
} 
int main()
{
	dfs(0);
	return 0;
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小蠢驴iOS专题

实际开发中-Block导致循环引用的问题

1874
来自专栏点滴积累

shapeless官方指南翻译写在前面

目录 前言 Shapeless简介 The Type Astronaut's Guide to Shapeless简介 总结 一、前言        在我的20...

3597
来自专栏Jimoer

经历的面试题,先做下部分总结。

1603
来自专栏Java技术栈

刚写完这段代码,就被开除了……

显然不是,休眠的逻辑,大家都懂,不需要写注释,你注释写休眠 1 天也没意义啊。。。

1041
来自专栏liukaili_666888999

swift和oc区别

swift注重安全性,oc注重灵活性。swift有函数式编程,面向对象编程和面向协议编程,而oc几乎只有面向对象编程。swift更注重值类型的数据结构,而oc遵...

5262
来自专栏NetCore

[原创]Fluent NHibernate之旅(三)-- 继承

经过了“开篇”和“简单映射”两篇文章,相信大家对Fluent NHibernate 有了一定的了解了,FluentNHibernate实际就是对 NHibern...

1948
来自专栏数据的力量

Vlookup多条件匹配(不用辅助列)

3664
来自专栏偏前端工程师的驿站

JS魔法堂:不完全国际化&本地化手册 之 实战篇

前言  最近加入到新项目组负责前端技术预研和选型,其中涉及到一个熟悉又陌生的需求——国际化&本地化。熟悉的是之前的项目也玩过,陌生的是之前的实现仅仅停留在"有"...

23610
来自专栏工科狗和生物喵

【计算机本科补全计划】指令:计算机的语言(MIPS) --计算机组成原理

正文之前 今天的主题就是,重新学一次汇编语言,不过总感觉跟单片机的汇编语言没啥差别,不过就是地址变宽,然后一些限制多了不少,因为计算机要进行大量的运算,所以更加...

7367
来自专栏web编程技术分享

【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第六节)

39912

扫码关注云+社区