寒假作业问题(DFS方法)

这篇博客探讨了一个小学数学寒假作业问题,要求用1~13的数字填满四个算式,确保每个数字不重复。作者通过分析指出问题复杂度较高,提出两种解题方法:穷举搜索和深度优先搜索(DFS)。代码部分展示了如何用DFS解决此问题,作者表示经过练习对DFS算法有了初步理解,并计划进一步加强练习。

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

问题:

寒假作业
现在小学的数学题目也不是那么好玩的。
看看这个寒假作业:
每个方块代表1~13中的某一个数字,但不能重复。
□ + □ = □
□ - □ = □
□ × □ = □
□ ÷ □ = □
比如:
6 + 7 = 13
9 - 8 = 1
3 * 4 = 12
10 / 2 = 5
以及:
7 + 6 = 13
9 - 8 = 1
3 * 4 = 12
10 / 2 = 5
就算两种解法。(加法,乘法交换律后算不同的方案)
你一共找到了多少种方案?
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

分析:

这个问题和上次写的那个凑算式问题有异曲同工之妙,那个只有一个等式,而这个题目四个等式必须都满足,问题规模较大。由此可见,这道题目是较为复杂的。
但是解题思路是一样的:第一种办法:穷举搜索,直接列出所有可能,再验证是否满足这四个等式,穷举搜索的方法有暴力和全排列;第二种办法:采用深度搜索优先思想,用递归方法,列出可能的解。
在解这道问题时要同时满足四个条件,则列出一个算式可能之后就判定是否符合条件,假如符合的话,继续进行枚举;假若不符合,直接返回,不用再进行之后的枚举。这样的话能够节省时间,提高效率。

代码:

DFS解决:

#include<iostream>
using namespace std;
int total = 0, num[14], flag[14];               //舍弃第0位不用,1-13位,flag为标志位
void dfs(int n)
{
	if (n >= 14)                                //不满足,直接退出
		return;
	else if (n == 4 && num[1] + nu
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值