求矩阵的最大值(设惟一)
本题要求编写程序,求一个给定的m×n矩阵的最大值以及位置。题目保证最大值惟一。
输入格式:
输入第一行给出两个正整数m和n(1≤m,n≤6)。随后m行,每行给出n个整数,其间以空格分隔。
输出格式:
输出在第一行中输出最大值,在第二行中按照“行下标 列下标”(下标从0开始)的格式输出最大值的位置。
输入样例:
3 2
6 3
23 -9
6 -1
输出样例:
23
1 0
分析:由题目很直观的看出需要使用二维数组,是一个简单地求解二维数组的最大值。根据本题不难分析出以下的过程。
第一步:建立二维数组(双循环)
第二步:求取二维数组的最大值(双循环)
第三步:求解最大值的下标 (双循环)
代码实现:
#include<stdio.h>
int main()
{
int m = 0, n = 0;
int max = 0;
int a[50][50];//因为题目无法确定m,n的值,所以我们的二维数组定义稍微大一点
scanf("%d %d", &n, &m);
//第一步:建立二维数组
for (int i = 0;i < n;i++)//二维数组的存储数据一般使用双循环
{//外循环支配行
for (int j = 0;j < m;j++)
{//内循环支配列
scanf("%d", &a[i][j]);
}
}
//第二步:求解二维数组最大值
max = a[0][0];//假定二维数组第一项为最大值
for (int i = 0;i < n;i++)
{
for (int j = 0;j < m;j++)
{
if (a[i][j] > max)
{
max = a[i][j];
}
}
}
printf("%d\n", max);
//第三步:求解最大值下标
for (int i = 0;i < n;i++)//寻找最大值的下标
{
for (int j = 0;j < m;j++)
{
if (max == a[i][j])
printf("%d %d", i, j);
}
}
return 0;
}