19 条题解

  • 0
    @ 2025-1-24 23:16:59

    MXOJ B1 三连击

    思路

    这题的数据范围极小,暴力就能过。但是有几个坑点:

    1. 99 个数用且仅用一次。
    2. 答案从小到大排列。

    然后我们枚举第一个数,再通过比例求出后两个数,判断合法即可。

    代码里有详细注释。

    代码

    #include <iostream>
    using namespace std;
    
    bool func(int x) // 判断每个数用且仅用一次
    {
        bool used[15] = {};
        int i;
        while (x) // 分解数位
        {
            used[x % 10] = true;
            x /= 10;
        }
        for (i = 1; i <= 9; i++)
        {
            if (!used[i])
            {
                return false;
            }
        }
        return true;
    }
    
    int main()
    {
        int i, j, k, tmp;
        for (i = 123; i <= 333; i++) // 要求每个数用且仅用一次,所以从 123 开始枚举,而且有三个数,第一个数最大 333
        {
            j = i * 2; // 第二个数
            k = i * 3; // 第三个数
            tmp = i * 1000000 + j * 1000 + k; // 三个数连接起来,方便判断
            if (func(tmp))
            {
                cout << i << " " << j << " " << k << endl;
            }
        }
        return 0;
    }
    

    交上去,不出意外的 WA 了。因为这是一道提交答案题,把代码复制到本地,再将运行结果输出即可。

    如果你懒得这么做,也可以去看其他人的题解。

    信息

    ID
    32
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    526
    已通过
    269
    上传者