为啥

P1618 三连击(升级版)

muse_umbra @ 2019-06-16 11:38:47

#include<bits/stdc++.h>
using namespace std;
int vis[10],fl;
int main()
{
    int a,b,c;
    int l,j,k;
    scanf("%d%d%d",&a,&b,&c);
    for(int i=111;i<1000;i++)
    {
        memset(vis,0,sizeof(vis));
        l=i;
        j=i*b/a;
        k=i*c/a;
        int ddl=0;
        int o=l,p=j,q=k;
        if(j>999||k>999)continue;
        int w=3;
        while(w--)
        {
            int x=l%10,y=j%10,z=k%10;
            if(x==0||y==0||z==0){ddl=1;break;}
            if(vis[x]||vis[y]||vis[z]){ddl=1;break;}
            if(!vis[x])vis[x]=1;
            if(!vis[y])vis[y]=1;
            if(!vis[z])vis[z]=1;
            l/=10,j/=10,k/=10;
        }
        if(ddl)continue;
        else printf("%d %d %d\n",o,p,q),fl++;
    }
    if(!fl)printf("No!!!");
    return 0;
}

为啥啊 为什么只对了两个点 求助


by 275307894a @ 2019-06-16 12:43:48

因为你没有判重。像样例,198 396 594在9的时候,你的代码应该是顺利完结的


by 275307894a @ 2019-06-16 12:45:38

应该要在 if(!vis[x])vis[x]=1;之前加一个if(x==y||y==z||x==z){ddl=1;break;}


|