2016年第七届蓝桥杯C/C++A组第六题---寒假作业

来源:互联网 发布:p2p网络管理器 编辑:程序博客网 时间:2024/04/30 14:28
寒假作业


问题描述:

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

   □ + □ = □
   □ - □ = □
   □ × □ = □
   □ ÷ □ = □
   
每个方块代表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


就算两种解法。(加法,乘法交换律后算不同的方案)
 
你一共找到了多少种方案?

请填写表示方案数目的整数。

注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。


依旧是dfs,其中有且坑的地方就是,当在做除法的时候,精度会丢失,例如3/2 等于1会被算作一种解法,这是不正确的,把商和除数乘起来等于被除数就好了

#include <iostream>#include <math.h>using namespace std;int a[13] ;int counter = 0;int visited[14] = {0};bool flag = true;void judge(int n){if (n>=13){counter++;return;}for (int i=1;i<=13;i++){flag = true;if (visited[i]==0){a[n] = i;visited[i] = 1;}elsecontinue;if (n==3&& a[1] + a[2] != a[3])flag = false;if (n==6&& a[4] - a[5] != a[6])flag = false;if (n==9&& a[7] * a[8] != a[9])flag = false;if (n==12&& a[12] * a[11] != a[10])flag = false;if (flag==false){visited[i] = 0;continue;}else{judge(n + 1);visited[i] = 0;}}}int main() {for(int i=0;i<13;i++)a[i] = -100;judge(1);cout << counter;cin >> counter;}


原创粉丝点击