寒假作业
现在小学的数学题目也不是那么好玩的。
看看这个寒假作业:
□ + □ = □
□ - □ = □
□ × □ = □
□ ÷ □ = □
(如果显示不出来,可以参见【图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 rel[13]={0};
int num[13]={0};
int sum=0;
void count()
{
if(
num[7]*num[8]==num[9]&&
num[10]/num[11]==num[12]
)
{
printf("%d\n",sum);
sum++;
}
else
{
printf("****\n");
}
}
void check(int i)
{
int j,a;
if(i==3)
{
if((num[0]+num[1])!=num[2])
{
return ;
}
}
if(i==6)
{
if(num[3]-num[4]!=num[5])
{
return ;
}
}
if(i==9)
{
if(num[6]*num[7]!=num[8])
{
return ;
}
}
if(i>=12)
{
if(num[9]!=num[11]*num[10])//注意除法转换成乘法
{
return ;
}
else
{
sum++;
/* printf("%d+%d=%d\n",num[0],num[1],num[2]);
printf("%d-%d=%d\n",num[3],num[4],num[5]);
printf("%d*%d=%d\n",num[6],num[7],num[8]);
printf("%d/%d=%d\n",num[9],num[10],num[11]);
printf("\n\n");*/
return ;
}
}
for(a=0;a<13;a++)
{
if(rel[a]!=1)
{
rel[a]=1;
num[i]=a+1;
check(i+1);
rel[a]=0;
}
}
}
int main()
{
int n;
check(0);
printf("%d",sum);
return 0;
}
还是深度加剪枝。欢迎评论。