问题 I: 零基础学C/C++124——海选女主角
题目描述
刚好来了m*n个MM,站成一个m*n的队列,副导演Fe(OH)2为每个MM打了分数,分数都是32位有符号整数。 一开始我很纳闷:分数怎么还有负的?Fe(OH)2解释说,根据选拔规则,头发染成黄色、化妆太浓、穿的太少等等都要扣分数的,扣的多了就可能是负分了,当然,如果发现话语中夹有日语,就直接给-2147483648分了。 分数送上来了,是我做决定的时候了,我的一个选拔原则是,要选一个面试分数绝对值(必须还是32位整数)最大的MM。 特别说明:如果不幸选中一个负分的MM,也没关系,因为我觉得,如果不能吸引你,那要想法恶心你。
输入
输入数据有多组,每组的第一行是两个整数m和n,表示应聘MM的总共的行列数,然后是m行整数,每行有n个,m和n的定义见题目的描述。
输出
对于每组输入数据,输出三个整数x,y和s,分别表示选中的MM的行号、列号和分数。 note:行号和列号从一开始,如果有多个MM的分数绝对值一样,那么输出排在最前面的一个(即行号最小的那个,如果行号相同则取列号最小的那个)。
样例输入 Copy
2 3
1 4 -3
-7 3 0
样例输出 Copy
2 1 -7
提示
【数据范围】
1 <= n, m <= 1000
题解
还是绝对值的问题,代码有个小坑输出的时候下标要(x+1,y+1),如果数组初始化行列为1,不就用担心。
其次,由于可能会出现-2147483648,建议用fabs()函数,返回值为double型
如果你的错误是运行错误AC67%请将数组放到外面定义为全局变量并且扩大 orz
代码(AC)
点击查看代码
#include<stdio.h>
#include<math.h>
int a[1000][1000];
int main()
{
int m, n, x, y, max;
while (scanf("%d%d",&m,&n)!=EOF)
{
x = y = 0;
for(int i =0;i<m;i++)
for (int j = 0; j < n; j++)
scanf("%d",&a[i][j]);
max = a[0][0];
for(int i =0;i<m;i++)
for (int j = 0; j < n; j++)
{
if (fabs(a[i][j]) > fabs(max))
{
x = i;
y = j;
max = a[i][j];
}
}
printf("%d %d %d\n",x+1,y+1,max);
}
return 0;
}