求dalao

P1618 三连击(升级版)

超级小周 @ 2019-03-26 21:48:41

#include<bits/stdc++.h>
using namespace std;
int zkl[10]={0};
int aa,bb,cc;//枚举数 
int a,b,c;//不用我说吧 
int c1,c2,c3;//记录数 
int sum;//各个位数 
int num=0;//用来判断是否有解 
int main()
{
    int u=0;
    cin>>a>>b>>c;
    for(int i=1;i<=987;i++)
    {   memset(zkl,0,sizeof(zkl));
        u=1;
        aa=i*a; 
        bb=i*b; 
        cc=i*c;
        c1=aa;c2=bb;c3=cc;
        while(aa<1000&&aa!=0){{sum=aa%10;zkl[sum]++;aa=aa/10;
        } 
        while(bb<1000&&bb!=0){sum=bb%10;zkl[sum]++;bb=bb/10;
        }
        while(cc<1000&&cc!=0){sum=cc%10;zkl[sum]++;cc=cc/10;
        }
        for(int i=1;i<=9;i++)if(zkl[i]!=1)u=0;
        if(u==1){cout<<c1<<" "<<c2<<" "<<c3<<endl;num=1;}
    }
    if(num==0)cout<<"No!";
return 0;} 

by 矢信 @ 2019-03-26 22:00:46

可以用暴力


#include<bits/stdc++.h>
using namespace std;
bool god(int a,int b,int c) {
    int x,y,z;
    x=a;
    y=b;
    z=c;
    if (x/10==0||x/10%10==0||x/100==0) return false;
    if (y/10==0||y/10%10==0||y/100==0) return false;
    if (z/10==0||z/10%10==0||z/100==0) return false;
    if (x%10==x/100||x%10==x/10%10||x/10%10==x/100) return false;
    if (y%10==y/100||y%10==y/10%10||y/10%10==y/100) return false;
    if (z%10==z/100||z%10==z/10%10||z/10%10==z/100) return false;
    if (x%10==y%10||x%10==y/10%10||x%10==y/100) return false;
    if (x/10%10==y%10||x/10%10==y/10%10||x/10%10==y/100) return false;
    if (x/100==y%10||x/100==y/10%10||x/100==y/100) return false;
    if (z%10==y%10||z%10==y/10%10||z%10==y/100)return false;
    if (z/10%10==y%10||z/10%10==y/10%10||z/10%10==y/100)return false;
    if (z/100==y%10||z/100==y/10%10||z/100==y/100) return false;
    if (x%10==z%10||x%10==z/10%10||x%10==z/100)return false;
    if(x/10%10==z%10||x/10%10==z/10%10||x/10%10==z/100)return false;
    if (x/100==z%10||x/100==z/10%10||x/100==z/100) return false;
    return true;
}
int main() {
    int i,j,v;
    int x,y,z;
    int f=0,b=0;
    int A,B,C;
    cin>>A>>B>>C;
    for (i=1; i<=9; i++) {
        for (j=1; j<=9; j++) {
            for (v=1; v<=9; v++) {
                if (i!=j&&i!=v&&j!=v) {
                    x=100*i+10*j+v;
                    if (x%A==0) {
                        y=x/A*B;
                        z=x/A*C;
                        if (x<=999&&y<=999&&z<=999) {
                            if (god(x,y,z)) {
                                b=1;
                                if (f==0) {
                                    f=1;
                                    cout<<x<<" "<<y<<" "<<z;
                                } else cout<<endl<<x<<" "<<y<<" "<<z;
                            }
                        }
                    }
                }
            }
        }
    }
    if (b==0) cout<<"No!!!";
    return 0;
}
但看一看是怎么做的,
不要只抄

by 矢信 @ 2019-03-26 22:02:08

其实很简单,只需要把不能满足的情况一一列举


by 超级小周 @ 2019-03-27 15:16:10

等下 if(num==0)cout<<"No!";


by 超级小周 @ 2019-03-27 15:16:44

好吧..."No!!!"


by 超级小周 @ 2019-03-30 15:36:58

谢谢dalao AC了

#include<bits/stdc++.h>
using namespace std;
int zkl[10]={0};
int aa,bb,cc;//枚举数 
int a,b,c;//不用我说吧 
int c1,c2,c3;//记录数 
int sum;//各个位数 
int num=0;//用来判断是否有解 
int main()
{
    int u=0;
    cin>>a>>b>>c;
    for(int i=1;i<=987;i++)
    {   memset(zkl,0,sizeof(zkl));
        u=1;
        aa=i*a; 
        bb=i*b; 
        cc=i*c;
        c1=aa;c2=bb;c3=cc;
        while(aa<1000&&aa!=0){sum=aa%10;zkl[sum]++;aa=aa/10;
        } 
        while(bb<1000&&bb!=0){sum=bb%10;zkl[sum]++;bb=bb/10;
        }
        while(cc<1000&&cc!=0){sum=cc%10;zkl[sum]++;cc=cc/10;
        }
        for(int i=1;i<=9;i++)if(zkl[i]!=1)u=0;
        if(u==1){cout<<c1<<" "<<c2<<" "<<c3<<endl;num=1;}
    }
    if(num==0)cout<<"No!!!";
return 0; }

by 超级小周 @ 2019-03-30 15:38:09

@qingsan 谢谢


by 矢信 @ 2019-03-30 21:35:56

没事


|