60分求助大佬orz

P1618 三连击(升级版)

EZAIJ @ 2023-03-25 16:27:05

测试点1,2,4,5没过,大佬带带!!

#include<bits/stdc++.h>
using namespace std;

int a,b,c,cnt[10],t[3],backup[10],flag;
double ans[3];

int check(double y)
{
    if(y!=(int)y) return 0;
    int x=(int)y;
    for(int i=0;i<3;i++)
    {
        if(backup[x%10]||!(x%10)) return 0;
        backup[x%10]=1;
        x/=10;
    }
    if(x) return 0;
    return 1;
}

void dfs(int num)
{
    if(num==3)
    {
        memset(ans,0,sizeof(ans));
        for(int i=0;i<3;i++)
            ans[0]=ans[0]*10+t[i];
        ans[1]=ans[0]*b/a;
        ans[2]=ans[1]*c/b;
        memcpy(backup,cnt,sizeof(cnt));
        if(check(ans[1])&&check(ans[2])&&ans[1]<ans[2]&&ans[0]<ans[1])
        {
            flag=1;
            for(int i=0;i<3;i++)
                printf("%.0lf ",ans[i]);
            puts("");
        }
        return;
    }
/*  t[0]=1,t[1]=9,t[2]=2;
    dfs(3);*/
    for(int i=1;i<=9;i++)
    {
        if(!cnt[i])
        {
            t[num]=i;
            cnt[i]=1;
            dfs(num+1);
            cnt[i]=0;
        }   
    }
}

int main()
{
    scanf("%d%d%d",&a,&b,&c);
    dfs(0);
    if(!flag) printf("NO!!!");
    return 0;
}

by hjc999 @ 2023-07-05 11:25:02

有点小问题 代码:


#include "bits/stdc++.h"
using namespace std;

//记忆化
bool used[10]; 
int main(){
    int a,b,c,ans=0;cin>>a>>b>>c;
    for(int d1=1;d1<10;d1++){
        if(used[d1])continue;
        used[d1]=1;
        for(int d2=1;d2<10;d2++){
            if(used[d2])continue;
            used[d2]=1;
            for(int d3=1;d3<10;d3++){
                if(used[d3])continue;
                used[d3]=1;
                for(int d4=1;d4<10;d4++){
                    if(used[d4])continue;
                    used[d4]=1;
                    for(int d5=1;d5<10;d5++){
                        if(used[d5])continue;
                        used[d5]=1;
                        for(int d6=1;d6<10;d6++){
                            if(used[d6])continue;
                            used[d6]=1;
                            for(int d7=1;d7<10;d7++){
                                if(used[d7])continue;
                                used[d7]=1;
                                for(int d8=1;d8<10;d8++){
                                    if(used[d8])continue;
                                    used[d8]=1;
                                    for(int d9=1;d9<10;d9++){
                                        if(used[d9])continue;
                                        used[d9]=1;

                                        int A = d1*100+d2*10+d3;
                                        int B = d4*100+d5*10+d6;
                                        int C = d7*100+d8*10+d9;

                                        if(A*b==B*a and A*c==C*a){
                                            cout<<A<<" "<<B<<" "<<C<<endl;; 
                                            ans++;                                          
                                        }   

                                        used[d9]=0; 
                                    }
                                    used[d8]=0; 
                                }
                                used[d7]=0; 
                            }
                            used[d6]=0; 
                        }
                        used[d5]=0; 
                    }
                    used[d4]=0; 
                }
                used[d3]=0;
            }
            used[d2]=0;         
        }
        used[d1]=0;
    }

    if(!ans)cout<<"No!!!";

}

|