1. 程式人生 > 其它 >第六週學習總結

第六週學習總結

第六週學習總結


目錄


本週我們主要學習了二維陣列的相關知識。

二維陣列的定義

  • 靜態定義

    型別說明符  陣列名[常量表達式][常量表達式]
    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;
}