活动地址:CSDN21天学习挑战赛
前言
今天和大家一起学习一下二维数组的比较大小。
一、最高身高
题目来源:
描述
KiKi想从n行m列的方阵队列中找到身高最高的人的位置,请你帮助他完成这个任务。
输入描述:
第一行包含两个整数n和m,表示这个方阵队列包含n行m列。从2到n+1行,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示方阵中的所有人的身高(保证输入身高都不相同)。(1≤x≤n≤10,1≤y≤m≤10)
输出描述:
一行,输出两个整数,用空格分隔,表示方阵中身高最高的人所在的行号和列号。
二、错误代码
1.错误原因
当时想法:后一个和前一个比较,然后找出最大的。
缺陷:1、后一个应该和前面所有元素的最大值比较。
2、我的代码不会换行(见下)。
#include<stdio.h>
int main(){
int n,m,a=0,b=0;
scanf("%d %d",&n,&m);
int arr[10][10];
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
scanf("%d ",&arr[i][j]); //输入数组
}
}
for(int k=0;k<n;k++){
int l=0;
for(int w=l+1;w<m;w++,l++){
if(arr[k][l]<arr[k][w]){ //前一个和后一个比较
a=k;
b=w;
}
}
}
}
}
printf("%d %d",a+1,b+1); //按照题目要求,记得+1呦
return 0;
}
这样就是 1和2比较,2和3比较,4和5比较,就不行了。
2.正确思路
后一个应该和前面所有元素的最大值比较。
我们把前面的最大值保存下来和后面的数比较,本质和一维数组一样。
#include<stdio.h>
int main()
{
int arr[10][10] = {0},n,m,x,y;
int max = 0,max_x = 0,max_y = 0;
scanf("%d %d",&n,&m);
for(int i = 0;i < n;i++)
{
for(int j = 0;j < m;j++)
{
scanf("%d",&arr[i][j]); //输入一个,判断一个
if(max < arr[i][j]) //一边比较一边保留最大值
{
max = arr[i][j];
max_x = i,max_y = j;
}
}
}
printf("%d %d\n",max_x + 1,max_y + 1);
return 0;
}
总结
以上就是今天要讲的内容,本文仅仅简单介绍了二维数组比较大小的办法,希望对大家有帮助~