#3RE
查看原帖
#3RE
901337
qwertyuuiigfvcgv楼主2024/1/4 17:34
#include<iostream>
#include<vector>
#include<sstream>
#include<stdio.h>
using namespace std;
int a[4];
int ans[32767][4];
int x = 0;
bool check[4];
void dfs(int k,int a1,int b,int c){
    if(k>=3){
        int ans1 = 0;
        for(int i = 0;i<3;i++){
            ans1 = ans1*10+a[i];
        }
        vector<bool> c1;
        for(int i = 0;i<=10;i++){
            c1.push_back(false);
        }
        c1[a[0]] = true;
        c1[a[1]] = true;
        c1[a[2]] = true;
        if(ans1%a1 == 0){
            int gb = ans1/a1;
            if(gb*b<=999&&gb*c<=999){
                int b1 = gb*b;
                int c2 = gb*c;
                stringstream s1;
                stringstream s2;
                s1<<b1;
                s2<<c2;
                string sb1 = s1.str();
                string sc2 = s2.str();
                bool has=  false;
                for(int i = 0;i<3;i++){
                    if(sb1[i] == '0'){
                        has = true;
                        break;
                    }
                    if(c1[sb1[i] - '0']){
                        has = true;
                        break;
                    }else{
                        c1[sb1[i] - '0'] = true;
                    }
                }
                if(!has){
                    has = false;
                    for(int i = 0;i<3;i++){
                        if(sc2[i] == '0'){
                            has = true;
                            break;
                        }
                        if(c1[sc2[i] - '0']){
                            has = true;
                            break;
                        }else{
                            c1[sc2[i] - '0'] = true;
                        }
                    }
                    if(!has){
                        ans[x][0] = ans1;
                        ans[x][1] = gb*b;
                        ans[x][2] = gb*c;
                        x++;
                    }
                }
            }
        }
        return;
    }
    for(int i = 1;i<=9;i++){
        if(!check[i]){
            a[k] = i;
            check[i] = true;
            dfs(k+1,a1,b,c);
            check[i] = false;
        }

    }
}
int main(){
    //freopen("C:\\Users\\Lilebin\\Downloads\\P1618_3.in","r",stdin);
    int a1,b,c;
    cin>>a1>>b>>c;
    if(a1 == 0||b==0||c==0){
        cout<<"No!!!";
        return 0;
    }
    dfs(0,a1,b,c);
    if(x==0){
        cout<<"No!!!";
    }else{
        for(int i = 0;i<x;i++){
            cout<<ans[i][0]<<" "<<ans[i][1]<<" "<<ans[i][2]<<endl;
        }
    }
}

#3RE 过数据点无问题,请问问题出在哪?

2024/1/4 17:34
加载中...