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;
}
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;
}
沒有留言:
張貼留言