首页 > 编程语言 > 详细

C语言基础练习——最大值及其位置(二维数组)

时间:2019-11-28 01:40:18      阅读:116      评论:0      收藏:0      [点我收藏+]

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


(思路和下面的代码对照着看)

我的思路是定义a[100][100]用于输入数据。
定义b[101][2]用于记录每行最大值所在的行号和列号,比
如a[1][2],行号是1,列号是2

你可能注意到了我写的是b[101][2]而不是b[100][2],因为我把数组最大值的行号和列号放到了最后
比如有100行数据,那么b[101][0]和b[101][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及其行号列号
嵌套循环结束后输出本行最大值及其行号列号

最后来一个for循环i从0到n-1,找数组的最大值
这里我先把每行最大值行号和列号取了出来,如果我写在一起可能看这篇文章的人就看不懂了
如果直接写就是这样,a[b[i][0]][b[i][1]],就是代码中的a[x][y]
先假定数组最大值是第一行的最大值,然后让其他行最大值与之比较,如果maxmax<a[x][y],则修改maxmax及其行号列号
程序最后输出数组最大值及其行号列号

下面是实现代码:


 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 }

 


 

C语言基础练习——最大值及其位置(二维数组)

原文:https://www.cnblogs.com/an-drew/p/11946285.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!