【算法競賽 入門經典】 習題2-6 排列

一、題目

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

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章