2015年6月23日 星期二

從小學題目開始 - 求最大公因數

Q : 輸入幾個正整數,計算最大公因數並輸出



1. 公因數x,就是一組數字的共同因數,這組數字除以x都餘0
2. 公因數x,絕對不可能大於這組數字中最小的數字
3. 最大公因數,就是符合上述條件的n個x中,數值最大的

經過以上的思考,就可以用迴圈循序測試法寫出程式了

#include <iostream>

int common_divisor(int a, int b, int c)
{
  int min=a;

  if (b<min)  //找出 a b c 中最小的值做為測試起始值,避免多餘的測試
    min=b;
  if (c<min)
    min=c;

  for(int x=min; x>0; x--) //因要找出符合條件的最大值所以由大往小比對
  {
    if(a%x==0 && b%x==0 && c%x==0) //測試a b c 除以x是否都餘0
       return x; //完全比對符合則回傳x,即a b c的最大公因數
  }
  return 0; //不可能
}

int main()
{
  int a, b, c;

  std::cout << "請輸入3正整數:";
  std::cin >> a >> b >> c;
  std::cout << "最大公因數=" << common_divisor(a,b,c);
  return 0;
}

沒有留言:

張貼留言