解題思路:
題目給出的條件已經大大限定了三位數的範圍,對于比例為1的三位數,它的三倍也應該是三位數,一個粗略的範圍是[100,999/3],也就是[100,333],又由于三位數每位的數字各不相同,範圍調整為[123,329];從這個範圍裡取出一個比例為1的數,就可以計算出比例為2、3的三位數;設定數組x[10],若下标1到9對應的數字i在三位數中出現了,就用此下标通路數組x[i]計數加1,要滿足題設條件,x[1]到x[9]都必須為1,表明9個數字各不相同且都隻出現了一次,隻有這樣,才可以輸出對應的三個三位數。用C語言描述,就是:#include
#define z(N) while(N){x[N%10]++;N/=10;}
int main(){
int a,b,c,d,e,f;
for(a=123;a<=329;a++){
int g,i,x[10]={0};//初始化計數數組
b=2*a;c=3*a;//算出比例為2、3的三位數
d=a;e=b;f=c;
z(d)z(e)z(f)//取出三個三位數中的每位并計數
g=1;
for(i=1;i<=9;i++)
if(x[i]!=1){//若某位數并非隻出現了一次
g=0;//不滿足題設的條件
break;
}
if(g) printf("%d %d %d\n",a,b,c);
}
return 0;
}
注意事項:
找到符合條件的所有數後,直接輸出結果。
參考代碼:#include
int main(){
puts("192 384 576");
puts("219 438 657");
puts("273 546 819");
puts("327 654 981");
return 0;
}