zoukankan      html  css  js  c++  java
  • 蓝桥杯 寒假作业(全排列)

    第二题:寒假作业

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

    每个方块代表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

    就算两种解法。(加法,乘法交换律后算不同的方案)

    你一共找到了多少种方案?


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

    思路:由题可知,题中的序列是固定的,只有1-13这13个元素,所以可以枚举这13个元素的全部全排列,对每个排列根据条件进行筛选。但是13个数字的全排列运算时间非常长,等一个小时左右可以出结果。。。

    易错点:除法应该转换为乘法,因为int数作除法会丢掉结果的小数部分,导致错误结果。

     1 #include <iostream>
     2 #include <string>
     3 #include <set>
     4 #include <vector>
     5 #include <algorithm>
     6 
     7 using namespace std;
     8 
     9 int main()
    10 {
    11     vector<int> v;
    12     for (int i = 1; i <= 13; ++i)
    13         v.push_back(i);
    14 
    15     int cnt = 0;
    16     do
    17     {
    18         if (v[0] + v[1] == v[2] && v[3] - v[4] == v[5] && v[6] * v[7] == v[8] && v[9] == v[10] * v[11]) //此处要转换为乘法,因为int数作除法会去除小数部分,导致错误结果
    19             cnt++;
    20     } while (next_permutation(v.begin(), v.end()));
    21 
    22     cout << cnt << endl;
    23 
    24     return 0;
    25 }

    思路二:dfs,请参考:https://www.cnblogs.com/FengZeng666/p/10461885.html

    最终答案: 64

  • 相关阅读:
    03:矩形分割 (二分)
    09:膨胀的木棍 (二分+角度计算)
    A Cubic number and A Cubic Number (二分) HDU
    B
    08:不重复地输出数 (set)
    10:河中跳房子 (二分)
    07:和为给定数 (二分)
    04:网线主管 (二分)
    河中跳房子
    010:输出前k大的数
  • 原文地址:https://www.cnblogs.com/FengZeng666/p/10547875.html
Copyright © 2011-2022 走看看