一、題目
用 1,2,3…,9組成3個三位數abc,def和ghi,每個數字恰好使用一次,要求abc:def:ghi=1:2:3。按照“abc def ghi”的格式輸出所有解,每行一個解。提示:不必太動腦筋。
二、解題思路
可以想到abc的範圍應該是大於123小於333。用數組num[10]保存1-9這九個數字的使用情況,num[i]=0,表示沒有使用,num[i]=1,表示使用了。
直接暴力求解搜索def=2abc,ghi=3abc,並改變相應位的數字對應的num數組的值,若最後num數組的num[1]-num[9]均爲1,即1-9每個數字都出現過,則輸出對應的abc,def,ghi;否則進行下一次循環。
三、代碼
#include<stdio.h>
int main(){
int abc,def,ghi,num[10];//num數組用於記錄相關數字是否出現過
for(abc=123;abc<333;abc++){ //根據要求縮小abc的取值範圍
for(int i=0;i<10;i++){
num[i]=0; //每次初始化記錄數組爲全0
}
num[abc/100]=1;//記錄abc百位上數字相關的數組值爲1
num[abc/10%10]=1;//記錄abc十位上數字相關的數組值爲1
num[abc%10]=1;//記錄abc個位上數字相關的數組值爲1
def=abc*2; //求def,並同理將出現的數字用num數組做記錄
num[def/100]=1;
num[def/10%10]=1;
num[def%10]=1;
ghi=abc*3;
num[ghi/100]=1;
num[ghi/10%10]=1;
num[ghi%10]=1;
int i;
for(i=1;i<10;i++){
if(num[i]!=1){
break;
}
}
if(i==10){
printf("abc: %d def: %d ghi: %d\n",abc,def,ghi);
}
}
return 0;
}