【九度OJ】1191:矩陣最大值

地址
http://ac.jobdu.com/problem.php?pid=1191
題目描述:
編寫一個程序輸入一個mXn的矩陣存儲並輸出,並且求出每行的最大值和每行的總和。
要求把每行總和放入每行最大值的位置,如果有多個最大值,取下標值最小的那一個作爲最大值。
最後將結果矩陣輸出。
輸入:
輸入的第一行包括兩個整數m和n(1<=m,n<=100),分別代表矩陣的行和列的維數。
接下來的m行每行有n個數,代表矩陣的元素。
輸出:
可能有多組測試數據,對於每組數據,輸出按題目要求執行後的矩陣。
樣例輸入:
3 3
1 1 1
1 1 1
1 1 1
3 3
3 2 3
2 3 2
3 2 3
樣例輸出:
3 1 1
3 1 1
3 1 1
8 2 3
2 7 2
8 2 3
來源:
2007年華中科技大學計算機研究生機試真題

編寫歷程
一開始提交的是錯誤的,不知道錯在了哪裏,就想去網上搜搜,看看其他人代碼裏面的思路,再找出自己沒有考慮到的地方一開始,我在輸入數據的時候是這麼寫的

for( int i = 0; i < m; i ++ ){
    maxN = 0;
    maxNum = 0;
    sumLine = 0;            

    for( int j = 0; j < n; j ++ ){
        scanf("%d", &a);

        matrix[ i ][ j ] = a;

        sumLine += a;   //求這一行的和

        if( a > maxNum ){
            maxNum = a;
            maxN = j;
            }


    matrix[ i ][ maxN ] = sumLine;
}

就是先初始這是了一個maxNum = 0,如果有遇到比這個數大的,那就替換掉,並記錄這個大的數的座標,因爲沒有考慮到輸入的數據可以是0,負數之類的,那樣的話,naxNum就持續爲0,也沒法記錄到大的數的座標。最後換成了這樣的

for( int i = 0; i < m; i ++ ){
    maxN = 0;
    sumLine = 0;            

    for( int j = 0; j < n; j ++ ){
        scanf("%d", &a);

        matrix[ i ][ j ] = a;

        sumLine += a;   //求這一行的和

        if( a > matrix[ i ][ maxN ] ){
            maxN = j;
        }
    }

    matrix[ i ][ maxN ] = sumLine;
}

就是初始化一個縱座標maxN = 0, 這樣在輸入的時候,首先會和(i,0)這個數進行比較,如果有比(i,0)這個數大的,那麼這個數的縱座標就會賦值給maxN。

源碼

#include<stdio.h>

int main(){
    int matrix[ 105 ][ 105 ];
    int m,n;
    int a;
    int maxN, sumLine = 0;

    while( scanf("%d %d", &m, &n) != EOF ){
        for( int i = 0; i < m; i ++ ){
            maxN = 0;
            sumLine = 0;            

            for( int j = 0; j < n; j ++ ){
                scanf("%d", &a);

                matrix[ i ][ j ] = a;

                sumLine += a;   //求這一行的和

                if( a > matrix[ i ][ maxN ] ){
                    maxN = j;
                }
            }

            matrix[ i ][ maxN ] = sumLine;
        }

        for( int i = 0; i < m; i ++ ){
            printf("%d", matrix[ i ][ 0 ] );
            for( int j = 1; j < n; j ++ ){
                printf(" %d", matrix[ i ][ j ] );
            }   
            printf("\n");
        }
    }
}
發佈了26 篇原創文章 · 獲贊 2 · 訪問量 4700
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章