2015年6月24日 星期三

使用陣列

Q : 輸入幾個正整數存放於陣列,計算最大公因數並輸出



1. 陣列就是一串性質相同的變數,存放於連續的 memory 位址
2. 當同性質的資料變多,應該用陣列來取代 a b c 這種獨立變數
3. 陣列 arr[n] 有 n 個元素,存放於 arr[0] ~ arr[n-1]
4. 處理陣列資料,通常會使用迴圈

本題和 "求最大公因數" 相同,但要用陣列來存放輸入資料,程式如下

#include <iostream>

int common_divisor(int d[], int n)
{
   int i, min, x;

   for(min=d[0], i=1; i<n; i++) //假設min是d[0],搜尋索引從1開始 
   {
      if (d[i]<min)
         min=d[i]; //找出d[i]中最小的值做為測試起始值
   }

   for(x=min; x>0; x--) //因要找出符合條件中最大的,所以迴圈從大到小遞減
   {
      bool match=true; //先假設所有 d[i] 可以被 x 整除
      for(i=0; i<n; i++)
      {
         if(d[i]%x!=0)  //任一項 d[i] 不能整除就跳出i迴圈,測試下一個x 
         {
            match=false;
            break;
         }
      }
      if (match) //完全符合,此 x 即為最大公因數,回傳主程式
        return x;
    }
    return 0; //不可能
}

int main()
{
    int data[1000], datacount=0; //假設輸入數字最多1000個

    std::cout << "請輸入n個正整數,輸入完成請按 Ctrl-Z" << std::endl; 
    while ( std::cin >> data[datacount] )
datacount++;

    std::cout << "最大公因數=" << common_divisor(data, datacount);
    return 0;
}

沒有留言:

張貼留言