有一個數組,內放10個整數,要求找出最小的數和它的下標,然後把它和數組中最前面的元素對換。

***知識點數組與循環的靈活運用。

是不是第一次看到題就會產生疑惑,什麼是下標?怎麼找到數組中最小的值?而且還要和最前面的元素互換!

彆着急,我們一步一步來分析:

  1. 數組的下標,比如在給定一個array[3]數組後,內有{1,2,3}三個元素,對應的array[0]就是1這個元素的下標。因爲計算機是從 0 開始索引的。

爲了更好的讓你們理解,這裏我轉發一位博客園@落霞與孤鶩齊飛! 的日誌

爲什麼數組的下標都是從0開始而不是1?

  • 假如數組的首地址 是 base_address 如果索引從 1 開始計,元素 a[1] 是第一個元素,它的地址就是
    base_address,當我們要獲取第 8 個元素 a[8] 的數據時,計算機就要找到元素 a[8] 所在的地址,計算公式就是
    base_address + (8-1)* type_size 。

    如果索引從 0 開始計,元素 a[0] 是第一個元素,它的地址就是 base_address,當我們要獲取第 8 個元素 a[7]
    的數據時,計算機就要找到元素 a[7] 所在的地址,計算公式就是 base_address + 7 * type_size 。

    我們發現,索引從 0
    開始,尋址時會少做一次減法,這就是一個優化,別小看這種優化,計算的數量一旦上去,比如上億次計算,那積累起來的優勢是相當可觀的。

其實,各種算法的優化,本質都是一樣的,讓計算機做更少的計算,只有做的事情少了,效率纔會提高。

  1. 找出數組最小數的下標,首先用循環給數組賦值(結束循環),將數組中下標爲0的值賦給一個變量名(Min)。

	int Subscript;
	int Min;
	int array[10];
	cout << "請輸入十個數:" << endl;
	for (int i = 0; i < 10; i++)
		cin >> array[i];//利用循環給數組賦值
		Min = array[0];//將數組下標爲0的元素賦給Min
		
  1. 再用循環,if判斷數組的循環值 i 是否小於Min,如果有,則將這個值賦給Min。繼續循環,直到滿足循環條件,數組中最小的那個數賦給Min,那麼最小值就已經出現。最小值出現了,下標也就知道了。

	for (int i = 0; i < 10; i++)
	{
   
   
		if (array[i] < Min)//如果數組中i下標的元素小於Min,則將它賦給Min
		{
   
   
			Min = array[i];//最小值
			Subscript = i;//下標
		}
	}
		cout << "最小數是:" << Min
		 << "   它的下標是:" << Subscript << endl;
		
  1. 找到最小數和下標後,接下來就要將這個數和數組中最前面的數進行交換了,也就是下標爲 0 的元素。
  2. 用最小數的下標與下標爲 0 的元素進行交換,交換方法這裏就不再贅述了。
	cout << "元素對換前:" << endl;
	for (int i = 0; i < 10; i++)
		cout << array[i]<<"  ";
	cout << endl;
//交換下標,相等於交換元素
	int temp = array[0];
	array[0] = array[Subscript];
	array[Subscript] = temp;

	cout << "元素對換後:" << endl;
	for (int i = 0; i < 10; i++)
		cout << array[i]<<"  ";

代碼演示

#include<iostream>
using namespace std;
int main()
{
   
   
	int Subscript;
	int Min;
	int array[10];
	cout << "請輸入十個數:" << endl;
	for (int i = 0; i < 10; i++)
		cin >> array[i];//利用循環給數組賦值
	cout << endl;
	Min = array[0];//將數組下標爲0的元素賦給Min
	for (int i = 0; i < 10; i++)
	{
   
   
		if (array[i] < Min)//如果數組中i下標的元素小於Min,則將它賦給Min
		{
   
   
			Min = array[i];
			Subscript = i;
		}
	}
	cout << "最小數是:" << Min << "   它的下標是:" << Subscript << endl;
	cout << "元素對換前:" << endl;
	for (int i = 0; i < 10; i++)
		cout << array[i]<<"  ";
	cout << endl;

	int temp = array[0];
	array[0] = array[Subscript];
	array[Subscript] = temp;

	cout << "元素對換後:" << endl;
	for (int i = 0; i < 10; i++)
		cout << array[i]<<"  ";
	return 0;
	
}

輸入十個數:
12 23 11 34 56 33 6 2 1 7

最小數是:1 它的下標是:8
元素對換前:
12 23 11 34 56 33 6 2 1 7
元素對換後:
1 23 11 34 56 33 6 2 12 7



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