专栏首页mathor第四届蓝桥杯决赛B组C/C++——填算式

第四届蓝桥杯决赛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 条评论
登录 后参与评论

相关文章

  • RegularExpressions——正则表达式

    mathor
  • 记一次渗透测试自己的jsp项目

     前两天写了个比较简单的login登陆页面,输入username和password,通过输入的username查询数据库中的password和框中的值进行对比验...

    mathor
  • 软件破解逆向工程实战(一)

    本系列教程无需任何基础,直接学习即可,对于没有c/c++基础的同学来说也没有什么坎,多看,多做就能掌握,同时说一下,我们的QQ群:689696631,因为本系列...

    mathor
  • Express4.x API (三):Response (译)

    Express4.x API 译文 系列文章 技术库更迭较快,很难使译文和官方的API保持同步,更何况更多的大神看英文和中文一样的流畅,不会花时间去翻译--,所...

    okaychen
  • 数据结构之动态规划问题

    数据结构中动态规划应该算得上是你避不开的一道槛了吧!其重要性不言而喻,今天就整理下学习笔记分享出来。希望对读者朋友也能有帮助,文章基本框架如下:

    小小詹同学
  • 413. 反转整数从低到高逐位处理

    将一个整数中的数字进行颠倒,当颠倒后的整数溢出时,返回 0 (标记为 32 位整数)。 样例

    和蔼的zhxing
  • Leetcode 264. Ugly Number II

    Write a program to find the n-th ugly number. Ugly numbers are positive number...

    triplebee
  • 每日一题 C++版(分类有效的IP地址和掩码)

    编程是很多偏计算机、人工智能领域必须掌握的一项技能,此编程能力在学习和工作中起着重要的作用。因此小白决定开辟一个新的板块“每日一题”,通过每天一道编程题目来强化...

    小白学视觉
  • 斐波纳耶数列

    斐波纳耶数列 <?php /** * for循环斐波纳耶 * * @param integer $n 数列长度 * @return array */...

    琯琯
  • 【leetcode刷题】T62-罗马数字转整数

    例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做  XXVII, 即为 XX + V + II ...

    木又AI帮

扫码关注云+社区

领取腾讯云代金券