找出一个三位数abc,abc的二倍和三倍所含的数字都不同

img


#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a,b,c,d,e,f,g,h,i,n;
    int sum=0;
    for(a=1; a<=3; a++){
        for(b=1; b<=9; b++){
            for(c=1; c<=9; c++){
                n = a*100 + b*10 + c;
                if(n>=123 && n<333){
                d = 2*n/100;
                e = 2*n/10%10;
                f = 2*n%10;
                g = 3*n/100;
                h = 3*n/10%10;
                i = 3*n%10;
                int A[10]={0};
    A[a]=1;A[b]=1;A[c]=1;A[d]=1;A[e]=1;A[f]=1;A[g]=1;A[h]=1;A[i]=1;
    for(i=1; i<10; i++)
        sum += A[i];
    if(sum == 9)
        printf("%d%d%d %d%d%d %d%d%d\n",a,b,c,d,e,f,g,h,i);
                }
    }
        }
    }
    return 0;
}

#include <stdio.h>
#include <stdlib.h>
 
int check(int *a, int aSize) {         // (1) 检测数组中是否有重复元素; 
    int i;
    int hash[10] = {};
    for(i = 0; i < aSize; ++i) {
        if(a[i] == 0) {
            return 0;
        } 
        
        if(hash[ a[i] ]) {
            return 0;
        }
        hash[ a[i] ] = 1;
    }
    return 1;
}

int main() {
    int a, b, c; 
    int n, n2, n3;
    int num[10]; 
    for(a=1; a<=3; a++){
        for(b=1; b<=9; b++){
            for(c=1; c<=9; c++){        // (2) 枚举三个数字; 
                n = a*100 + b*10 + c;
                n2 = n*2;
                n3 = n*3;
                if(n3 > 999) break;     // (3) 如果最大的数超过三位数,gg;
                
                num[0] = a;             // (4) 将涉及到的9个数字填充到数组中; 
                num[1] = b;
                num[2] = c;
                num[3] = n2/100;
                num[4] = n2/10%10;
                num[5] = n2%10;
                num[6] = n3/100;
                num[7] = n3/10%10;
                num[8] = n3%10;
                
                if( check(num, 9) ) {   // (5) 检测均不重复后输出; 
                    printf("%d %d %d\n", n, n2, n3);
                }
            } 
        }
    }
    return 0;
}

输出如下:

192 384 576
219 438 657
273 546 819
327 654 981