2016年蓝桥杯省赛C/C++ A组 第六题 寒假作业

本文探讨了一道小学数学假期作业题目,该题目要求利用1到13的数字填入方框中使得等式成立且数字不重复,并通过递归深度优先搜索算法计算所有可能的解法数量。
现在小学的数学题目也不是那么好玩的。 
看看这个寒假作业: 
□ + □ = □ 
□ - □ = □ 
□ × □ = □ 
□ ÷ □ = □ 
每个方块代表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 
就算两种解法。(加法,乘法交换律后算不同的方案) 
你一共找到了多少种方案? 
请填写表示方案数目的整数。 

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

#include<iostream>
using namespace std;
int visit[15], a[15];
int ans;

void DFS(int dep) {
	if(dep == 13) {
		if(a[10] == a[11] * a[12])
		ans++;
		return;
	}
	if(dep == 10) {
		if(a[7] * a[8] != a[9])
		return;
	}
	if(dep == 7) {
		if(a[4] - a[5] != a[6])
		return;
	}
	if(dep == 4) {
		if(a[1] + a[2] != a[3])
		return;
	}
	for(int i = 1; i <= 13; i++) {
		if(!visit[i]) {
			visit[i] = 1;
			a[dep] = i;
			DFS(dep + 1);
			visit[i] = 0;
		}
	}
} 

int main() {
	ans = 0;
	DFS(1);
	cout << ans << endl;
	return 0;
}

来源:https://blog.youkuaiyun.com/summonlight/article/details/61427968

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值