C語言基礎練習——最大值及其位置(二維數組)


C語言基礎練習——最大值及其位置(二維數組)

時間限制: 1 Sec  內存限制: 10 MB

題目描述

有一個n×m的矩陣,要求編程序求出: 
每行元素的最大值,以及其所在的行號和列號。求出所有元素的最大值,以及其所在的行號和列號。  

輸入

先輸入n,m (2<=n<=100,2<=m<=100) 
在輸入矩陣中各元素的值。(假設為整型數)  

輸出

先輸出每行元素的最大值的下標及其值,每個占一行; 
再輸出所有元素的最大值的下標及其值。  

樣例輸入 Copy

3 4
1 2 3 4
10 11 12 13
3 4 5 6

樣例輸出 Copy

0 3 4
1 3 13
2 3 6
1 3 13


下面是實現代碼:

 1 #include <stdio.h>
 2 int main()
 3 {
 4     int a[100][100],b[101][2];
 5     int n,m,i,k;
 6     scanf("%d%d",&n,&m);
 7     for(i=0; i<n; i++)
 8     {
 9         for(k=0; k<m; k++)
10         {
11             scanf("%d",&a[i][k]); //輸入 
12         }
13     }
14     for(i=0; i<n; i++) //找每行最大值 
15     {
16         int max=a[i][0]; //假定行首為最大值 
17         b[i][0]=i; //行首行號
18         b[i][1]=0; //行首列號 
19         for(k=1; k<m; k++)
20         {
21             if(max<a[i][k])
22             {
23                 max=a[i][k]; //修改第i行最大值 
24                 b[i][1]=k; //行內最大值,只有列號變化 
25             }
26         }
27         printf("%d %d %d\n",b[i][0],b[i][1],max); //輸出第i行最大值及其行號列號 
28     }
29     int maxmax; //整個數組的最大值 
30     for(i=0; i<n; i++)
31     {
32         int x=b[i][0]; //第i行最大值的行號 
33         int y=b[i][1]; //第i行最大值的列號 
34         if(i==0) //第0行 
35         {
36             maxmax=a[x][y]; //假定第0行最大值為數組最大值 
37             b[n][0]=0; //行號
38             b[n][1]=0; //列號
39         }
40         else //其他行 
41         {
42             if(maxmax<a[x][y])
43             {
44                 maxmax=a[x][y]; //修改數組最大值 
45                 b[n][0]=x; //行號
46                 b[n][1]=y; //列號
47             }
48         }
49     }
50     printf("%d %d %d",b[n][0],b[n][1],maxmax); //輸出數組最大值及其行號列號 
51     return 0;
52 }

 

(思路和代碼對照着看)

我的思路是定義數組a[100][100]用於輸入數據,定義數組b[101][2]用於保存數組a每行最大值所在的行號和列號
如果輸入100行數據:

a[0]行最大值的行號保存到b[0][0],列號保存到b[0][1]
a[1]行最大值的行號保存到b[1][0],列號保存到b[1][1]
. . . . . .
a[99]行最大值的行號保存到b[99][0],列號保存到b[99][1]

整個數組a最大值的行號保存到b[100][0],列號保存到b[100][1]

先用一個nxm的循環輸入數據

然后for循環i從0到n-1,找每一行的最大值。
先假定每行的行首是最大值,即max=a[i][0],當前行號為i,保存到b[i][0];列號為0,保存到b[i][1]
嵌套一個for循環k從1到n-1,讓max和a[i][1]……a[i][n-1]比較,如果max<a[i][k],則修改max及其行號列號
嵌套循環結束后輸出本行最大值及其行號列號
經過上面的循環,數組a每行最大值的行號列號都已經保存到數組b中

最后來一個for循環i從0到n-1,從每行的最大值中找數組的最大值
這里我把每行最大值行號和列號先賦值給x和y,如果我寫在一起可能看這篇文章的人就看不懂了
如果直接嵌套寫就是這樣,a[b[i][0]][b[i][1]],即代碼中的a[x][y]
先假定數組最大值是第一行的最大值,然后讓其他行最大值與之比較,如果maxmax<a[x][y],則修改maxmax及其行號列號
程序最后輸出數組最大值及其行號列號

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM