寒假作业--dfs



寒假作业


现在小学的数学题目也不是那么好玩的。
看看这个寒假作业:


   □  + □ = □
   □  - □ = □
   □ × □ = □
   □ ÷ □ = □
   
   (如果显示不出来,可以参见【图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 num[4][3];
int vis[14],sum;
void dfs(int step){
    int x=step/3;
    int y=step%3;
    if(step==12){
        if(num[3][1]!=0&&num[3][0]%num[3][1]==0&&num[3][0]/num[3][1]==num[3][2]){
//            for(int i=0;i<4;i++){
//
//                for(int j=0;j<3;j++){
//
//                    printf("%d ",num[i][j]);
//                }
//                printf("\n");
//            }
            sum++;
            //printf("\n");
        }
        return ;
    }
    else if(step==3){
        if(num[0][0]+num[0][1]!=num[0][2])
            return ;
    }
    else if(step==6){
        if(num[1][0]-num[1][1]!=num[1][2])
            return ;
    }
    else if(step==9){
        if(num[2][0]*num[2][1]!=num[2][2])
            return ;
    }
    for(int i=1;i<=13;i++){

        if(!vis[i]){
            num[x][y]=i;
            vis[i]=1;
            dfs(step+1);
            vis[i]=0;
        }
    }
}
int main()
{
    sum=0;
	dfs(0);
	printf("%d\n",sum);
	return 0;
}



猜你喜欢

转载自blog.csdn.net/kangyan__/article/details/79733220