寒假作业
现在小学的数学题目也不是那么好玩的。
看看这个寒假作业:
□ + □ = □
□ - □ = □
□ × □ = □
□ ÷ □ = □
(如果显示不出来,可以参见【图1.jpg】)
每个方块代表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<stdio.h>//深搜全排列 加判断条件
int a[13];
int b[14];
int count;
void dfs(int i)
{
if(i>11)
{
if((a[11]*a[10]!=a[9])||(a[0]+a[1]!=a[2])||(a[3]-a[4]!=a[5])||(a[6]*a[7]!=a[8]))
{
}
else
{
count++;
//可以打印出来所有情况 查看
// for(int j=0;j<=11;j++)
// printf("%-4d",a[j]);
// printf("\n");
}
}
else
{
for(int j=1;j<=13;j++)
{
if(b[j]==0)
{
a[i]=j;
// if(i==0&&j==13)//大家可以先试着不加这些判断条件试 跑出来的时间还是有不少差距的
// {
// break;
// }
// if(i==4&&a[i]>a[i-1])
// {
// continue;
// }
// if(i==7&&!(a[i]*a[i-1])>14)
// {
// continue;
// }
// if(i==10&&(a[i-1]%a[i])!=0)
// {
// continue;
// }
b[j]=1;
dfs(i+1);
b[j]=0;
}
}
}
}
int main()
{
dfs(0);
printf("%d",count);
}