前言
今天和大家一起学习一下二维数组的比较大小。
一、最高身高
题目来源:
描述
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; }
总结
以上就是今天要讲的内容,本文仅仅简单介绍了二维数组比较大小的办法,希望对大家有帮助~