LQ0046 凑算式枚举

Posted 海岛Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0046 凑算式枚举相关的知识,希望对你有一定的参考价值。

题目出处:蓝桥杯2016初赛 C++ B组G题

题目描述
这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
比如:
6+8/3+952/714 就是一种解法,5+3/1+972/486 是另一种解法。
这个算式一共有多少种解法?

输出格式
输出一个整数表示答案

问题分析
求解法数量,需要枚举所有的可能,使用置换函数next_permutation()得到全排列再行计算,程序代码最为简洁。
可以用多重循环来实现枚举,也可以用DFS来实现枚举。
程序计算结果得29。

AC的C++语言程序如下:

/* LQ0046 凑算式 */

#include <iostream>
#include <algorithm>

using namespace std;

double a[] = 1, 2, 3, 4, 5, 6, 7, 8, 9;

int main()

    int cnt = 0;
    do 
        double sum = a[0] + a[1] / a[2]
                + (a[3] * 100 + a[4] * 10 +a[5]) / (a[6] * 100 + a[7] * 10 + a[8]);
        if (sum == 10.0) cnt++;
     while (next_permutation(a, a + 9));

    printf("%d\\n", cnt);

    return 0;

以上是关于LQ0046 凑算式枚举的主要内容,如果未能解决你的问题,请参考以下文章

凑算式

LQ0064 9数算式枚举

LQ0066 算式900枚举

LQ0268 古堡算式枚举+进制

LQ0268 古堡算式枚举+进制

LQ0205 马虎的算式枚举+进制