题目描述:
现在小学的数学题目也不是那么好玩的。看看这个寒假作业:
□ + □ = □
□ - □ = □
□ × □ = □
□ ÷ □ = □
每个方块代表1~13中的某一个数字,但不能重复。比如:6 + 7 = 139 - 8 = 13 * 4 = 1210 / 2 = 5
以及:7 + 6 = 139 - 8 = 13 * 4 = 1210 / 2 = 5
就算两种解法。(加法,乘法交换律后算不同的方案)
你一共找到了多少种方案?
输入:
输出:
请填写表示方案数目的整数。
#include<stdio.h>
int a[14], v[14];
int c=0;
void dfs( int s){
int i;
if(s>3&&a[1]+a[2]!=a[3])return;//第一个算数不满足
if(s>6&&a[4]-a[5]!=a[6])return;//第二个算数不满足
if(s>9&&a[7]*a[8]!=a[9])return ;
if(s>12&&a[12]*a[11]==a[10]){//注意把除法变成乘法
c++;
return;
}
for( i=1;i<14;i++){
if(!v[i]){
v[i]=1;
a[s]=i;
if(s<13)//判断是否还可以往下找
dfs(s+1);
v[i]=0;
}
}
}
int main(){
dfs(1);
printf("%d",c);
return 0;
}
本文探讨了一道小学数学寒假作业难题,需要填充1到13的数字于方格中完成四则运算,且数字不可重复使用。通过递归深度优先搜索算法解决该问题,并统计所有可能的解法数量。
352

被折叠的 条评论
为什么被折叠?



