天天看點

c語言在三位數中尋找不能被6,[藍橋杯][算法提高VIP]尋找三位數 (C語言代碼)...

解題思路:

題目給出的條件已經大大限定了三位數的範圍,對于比例為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;

}