题目
输入一个3行4列的数组,找出该数组中绝对值最大的元素、输出该元素及其两个下标值。如有多个输出行号最小的,还有多个的话输出列号最小的。
输入
无
输出
无
样例输入
1 2 3 5
-2 5 8 9
6 -7 5 3
样例输出
9 2 4
PS:这题题目本身描述有点bug,应当是输出最大元素的绝对值才可以AC。
解题思路
首先读入数组,再对数组进行排序,找到绝对值最大的数值A,最后从左到右、从上到下开始遍历整个3*4的数组,输出第一个等于A的元素的行数和列数。
易错点
行、列的标号均从1开始。
代码
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int cmp(const void *a, const void *b){
int c = *(int *)a;
int d = *(int *)b;
if (c<d)
return 1;//降序
else
return -1;
}
int main()
{
int a[3][4];//题目未明确int类型,但根据推断是int
int max;
int line[12];
int i,j,isBreak = 0;
for (i=0;i<3;i++)
{
for (j=0;j<4;j++)
{
scanf("%d",&a[i][j]);
line[4*i+j] = abs(a[i][j]);
}
}
qsort(line,12,sizeof(int),cmp);
max = line[0];
for (i=0;i<3;i++)
{
for (j=0;j<4;j++)
{
if (abs(a[i][j])==max)
{
max = a[i][j];
isBreak = 1;
break;
}
}
if (isBreak==1)
break;
}
printf("%d %d %d",line[0],i+1,j+1);
}