#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;
}

找出一个三位数abc,abc的二倍和三倍所含的数字都不同
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
关注
#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
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用