ConstStar
发布于 2022-09-04 / 142 阅读 / 0 评论 / 0 点赞

蓝桥杯2013年B组:带分数

问题描述

100 可以表示为带分数的形式:100 = 3 + 69258 / 714。
还可以表示为:100 = 82 + 3546 / 197。
注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。
类似这样的带分数,100 有 11 种表示法。

解决

思路

全排列

代码

#include <iostream>
#include <algorithm>

using namespace std;

int main() {

    int buf[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};

    do {
        int n1 = 0;
        for (int i = 0; i < 7; ++i) {
            n1 *= 10;
            n1 += buf[i];

            int n2 = 0;
            for (int j = i + 1; j < 8; ++j) {
                n2 *= 10;
                n2 += buf[j];

                int n3 = 0;
                for (int k = j + 1; k < 9; ++k) {
                    n3 *= 10;
                    n3 += buf[k];
                }

                if (n2 % n3 == 0)
                    if (n1 + n2 / n3 == 100) {
                        cout << n1 << "+" << n2 << "/" << n3 << "=100" << endl;
                    }
            }

        }

    } while (next_permutation(buf, buf + 9));

    return 0;
}

评论