我的做法

P1618 三连击(升级版)

霹雳搅屎棍 @ 2018-08-30 17:11:14

不知道可不可行,vist和p分别是在本次循环中有没有用到这个数和接下来的三位数中有没有用到这个数

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int a,b,c;
int p[10]={0,1,2,3,4,5,6,7,8,9};
bool vis;
bool vist[10];
int main(int argc, char** argv) {
    scanf("%d%d%d",&a,&b,&c);
    for(int i=111;i<=999;i++){
        memset(vist,0,sizeof(vist));
        int x,y,z;
        x=i/100;
        y=i/10%10;
        z=i%10;
        //printf("\t%d %d %d\n",x,y,z);
        if(vist[x]||vist[y]||vist[z])
            continue;
        for(int m=1;m<=9;m++)
            if(p[m]==x||p[m]==y||p[m]==z)
                continue;
        vist[x]=vist[y]=vist[z]=1;
        int j=i/a*b;
        x=j/100;
        y=j/10%10;
        z=j%10;
        if(vist[x]||vist[y]||vist[z])
            continue;
        for(int m=1;m<=9;m++)
            if(p[m]==x||p[m]==y||p[m]==z)
                continue;
        vist[x]=vist[y]=vist[z]=1;
        int k=i/a*c;
        x=k/100;
        y=k/10%10;
        z=k%10;
        if(vist[x]||vist[y]||vist[z])
            continue;
        for(int m=1;m<=9;m++)
            if(p[m]==x||p[m]==y||p[m]==z)
                continue;
        if(j>999||k>999)
            break;
        printf("%d %d %d\n",i,j,k);
        vis=1;
    }
    if(!vis)
        cout<<"No!!!"<<endl;
    return 0;
}

by dinghongyu @ 2018-08-30 17:28:40

提交一下不就得了?


by Mikamedo @ 2018-08-30 17:39:14

@霹雳搅屎棍 哲学!哲学!


by 霹雳搅屎棍 @ 2018-08-31 15:10:57

@dinghongyu 这连样例都过不了啊


by 霹雳搅屎棍 @ 2018-08-31 15:11:59

@lyhokia


by lyhokia @ 2018-09-01 08:54:14

你这个也太长了吧。。还刷水题


|