三连击升级版(暴力枚举)

 

其实这道题比较简单,我们可以使用枚举,按照所给出的比例,将满足比例的三个数列举出来,然后再判断是否满足1~9都有

 

因为只有三个数,所以我们从1开始一直到999,然后将每一个三位数的每一位提取出来放在一个长度为10的数组中,每提取一个相应的数组位加1,最后如果数组下标1~9都是1的话就输出三个数

 

注意:1.每一位都是不超过999的数字,我刚开始写就犯了这样的错误 2.比例序列和数字都用double,不然推数的时候会出错

 

#include<iostream>
#include<cstring>
using namespace std;

int a[10];

int main(void)
{
    double A, B, C,v = 0;
    cin >> A >> B >> C;
    double _1, _2, _3;

    for (int i = 1; i < 1000; i++)
    {
        _1 = i;
        _2 = _1 * (B / A);
        _3 = _1* (C / A);

        if (_2 > 999 || _3 > 999) break;
        
        int m = _1;
        while (m)
        {
            a[m % 10]++;
            m /= 10;
        }

        m = _2;
        while (m)
        {
            a[m % 10]++;
            m /= 10;
        }

        m = _3;
        while (m)
        {
            a[m % 10]++;
            m /= 10;
        }

        int q = 1;
        for (int i = 1; i < 10; i++)
        {
            if (a[i] != 1)
            {
                q = 0;
                break;
            }
        }

        if (q)
        {
            cout << _1 << " " << _2 << " " << _3 << endl;
            v = 1;
        }


        memset(a, 0, sizeof(a));
    }
    if (v == 0)
    {
        cout << "No!!!" << endl;
    }
    return 0;
}

 

posted @ 2021-01-15 09:35  loliconsk  阅读(252)  评论(0)    收藏  举报