都快写吐了,为什么第五个过不了,有大佬帮忙看吗

P1618 三连击(升级版)

Devjl @ 2022-02-15 00:54:34

我不知道为什么用搜索写,但看着没问题呀,就是过不了第五个点,为什么呀

#include <iostream>
using namespace std;
int a, b, c;
char d[20];
bool p[15], q[15];
bool falg;

void print() {
    int h1[10], h2[10];
    int f1, f2, f3;
    bool flag = true;
    f1 = ((int)d[1]) * 100 + ((int)d[2]) * 10 + ((int)d[3]);
    f2 = (f1 / a) * b;
    f3 = (f1 / a) * c;
    if (f2 > 999 || f3 > 999)
        flag = false;
    int d1 = f1, d2 = f2, d3 = f3;
    for (int i = 1; i <= 3; i++) {
        q[d1 % 10] = 1;
        q[d2 % 10] = 1;
        q[d3 % 10] = 1;
        d1 /= 10;
        d2 /= 10;
        d3 /= 10;
    }

    for (int i = 1; i <= 9; i++) {
        if (q[i] == 0)
            flag = false;
        q[i] = 0;
    }
    if (flag) {
        if (falg)
            cout << endl;
        cout << f1 << " " << f2 << " " << f3;
        falg = true;
    }
}

void dfs(int k) {
    for (int i = 1; i <= 9; i++) {
        if (!p[i]) {
            p[i] = 1;
            d[k] = i;
            if (k == 3)
                print();
            else
                dfs(k + 1);
            p[i] = 0;
            d[k] = 0;
        }
    }
}

int main() {
    cin >> a >> b >> c;
    dfs(1);
    if (!falg)
        cout << "No!!!";
    return 0;
}

by 8atemak1r @ 2022-02-15 01:31:34

@Devjl 您的提交记录里也没这道题啊


by 编码落寞 @ 2022-02-15 09:31:19

@Devjl

ABC为123和ABC为246结果应该是一样的, 但是你的实际246输出值不全,建议先化简。


by Devjl @ 2022-02-15 22:49:29

@编码落寞 AC了,谢谢大佬


by lxdyz @ 2022-05-01 00:07:35

#include <iostream>
#include <iomanip> //为setprecision(2)提供证明。
using namespace std;//使用命名空间。
int main() 
{
    int A, B, C, a, b, c,a1, b1, c1;
    int as[9] = {};
    int as1, as2, as3, as4, as5=0;
    double q1;
    cin >> a >> b >> c;
    a1 = a / a;//试图寻找公倍数
    b1 = b / a;
    c1 = c / a;
    if (b1 / a1 == b / a && c1 / a1 == c / a)//去除公倍数
    {
        a = a1, b = b1, c = c1;
    }
    if (a<b&&b<c)//判断输入是否符合说明
    {
    for (A=100;A<1000;A++)
    {
    q1 = A / a;//求B C
    B = q1 * b;
    C = q1 * c;
    as[0] = A % 10;
     as[1] = (A / 10) % 10;
     as[2] = (A / 100) % 10;
     as[3] = B % 10;
     as[4] = (B / 10) % 10;
     as[5] = (B / 100) % 10;
     as[6] = C % 10;
     as[7] = (C / 10) % 10;
     as[8] = (C / 100) % 10;
     for (as1 = 0,as2=0,as3=1;as1 < 9; as1++)
     {
         as2 = as[as1] + as2;
         as3 = as[as1] * as3;
     }//输出乘积和合积
     if (as2 == 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 && as3 == 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9&&A and B and C<1000)
     {
         cout <<A <<" " << B << " " << C << endl;
         as5 = 1;

     }//判断乘积和和积 以及A B C 是否小于1000
    }
    if (as5 == 0)
    {
        cout << "No!!!";
    }//否定输出
   }
    return 0;
}

我优化了也一样??? @编码落寞


|