枚举数组记忆每位值

P1618 三连击(升级版)

dodoke @ 2020-01-04 21:35:38

// P1618 三连击(升级版)
#include<bits/stdc++.h>
using namespace std;
int s[10];
void setS(int number){
    int g=number%10;
    int ss=number/10%10;
    int b=number/100;
    s[g]=1;
    s[ss]=1;
    s[b]=1;
}
int main(){
    int a,b,c,sum=0;

    cin>>a>>b>>c;
    for(int i=123;i<=987;i++){
        memset(s, 0, sizeof(s));
        int s1=i;
        int s2=i*b/a;
        int s3=i*c/a;
        if(s2>999||s3>999) break;
        // 判断s1 s2 s3是否是不重复的数字
        setS(s1);
        setS(s2);
        setS(s3);
        int flag=0;
        for(int k=1;k<=9;k++){
            if(s[k]==0){
                flag=1;
                break;
            }
        }
        if(!flag){
            printf("%d %d %d\n",s1,s2,s3);
            sum++;
        }
    }
    if(sum==0) printf("No!!!");
    return 0;
}

|