第六週學習總結
阿新 • • 發佈:2021-11-04
第六週學習總結
目錄
本週我們主要學習了二維陣列的相關知識。
二維陣列的定義
-
靜態定義
型別說明符 陣列名[常量表達式][常量表達式] eg. int array[11][11];
-
動態定義(C++)
型別說明符 **陣列名 = new 型別說明符*[行數]; for (int i = 0; i < m; ++i) { 陣列名[i] = new 型別說明符[列數]; } //...... for (int i = 0; i < m; ++i) { delete[] 陣列名[i]; } delete[] 陣列名;
二維陣列的函式引用
我們在之前瞭解過,在自定義函式中引用一維陣列是這樣子的:
int func(int a[],int n)
{
//...
}
int main()
{
///...
func(a,n);
//...
}
那麼類似的,在自定義函式中引用二維陣列是這樣子的:
int func(int a[][列數],int n) //列數不能省!
{
//...
}
int main()
{
///...
func(a,n);
//...
}
二維陣列的應用
L2-3 找鞍點 (20 分)
一個矩陣元素的“鞍點”是指該位置上的元素值在該行上最大、在該列上最小。
本題要求編寫程式,求一個給定的n階方陣的鞍點。
輸入格式:
輸入第一行給出一個正整數n(1≤n≤6)。隨後n行,每行給出n個整數,其間以空格分隔。
輸出格式:
輸出在一行中按照“行下標 列下標”(下標從0開始)的格式輸出鞍點的位置。如果鞍點不存在,則輸出“NONE”。題目保證給出的矩陣至多存在一個鞍點。
輸入樣例1:
4 1 7 4 1 4 8 3 6 1 6 1 2 0 7 8 9
** 輸出樣例1:**
2 1
輸入樣例2:
2 1 7 4 1
輸出樣例2:
NONE
這道題是二維陣列大顯身手的舞臺。我們先找到行上的行最大值,然後在這最小值所在列上尋找列最小值。最後再將其一比較,若最大最小值相同,就找到了。
//參考程式碼
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
int a[11][11] = {0};
for (int i = 0; i < n; i++) //資料輸入
{
for (int j = 0; j < n; j++)
{
scanf("%d", &a[i][j]);
}
}
for (int i = 0; i < n; i++)
{
int max = a[i][0];
int maxj = 0;
for (int j = 0; j < n; j++) //找最大值
{
if (a[i][j] >= max)
{
max = a[i][j];
maxj = j;
}
}
int min = max;
int mini = 0;
for (int x = 0; x < n; x++) //找最小值
{
if (a[x][maxj] <= min)
{
min = a[x][maxj];
mini = x;
}
}
if (max == min) //比較
{
printf("%d %d", i, maxj);
return 0;
}
}
printf("NONE");
return 0;
}