蓝桥杯 寒假作业

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

   □ + □ = □
   □ - □ = □
   □ × □ = □
   □ ÷ □ = □
   
每个方块代表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
int a[13]={0},vis[14]={0},c=0;
bool check(){if(a[1]+a[2]==a[3]&&a[4]-a[5]==a[6]&&a[7]*a[8]==a[9]&&a[10]/a[11]==a[12]&&a[10]%a[11]==0)return 1;return 0;
}
void dfs(int n){if(n==13){if(check()){for(int i=1;i<=12;i++){printf("%d ",a[i]);if(i%3==0)printf("\n");}c++;}}else{for(int i=1;i<=13;i++){if(!vis[i]){a[n]=i;vis[i]=1;dfs(n+1);vis[i]=0;}	}	}
}
int main(){dfs(1);printf("%d",c);return 0;
} 

我只能说,dfs这样枚举是很慢的,我一开始等了半天结果没出来,以为是死循环,我找了半天错误,结果最后才发现是跑的太慢了,最后整整两分钟才出来。所以说还是要有耐心。等一等结果。

然后再考虑优化。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部