加载中...

浙江理工大学入队200题——11I

问题 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;
}
posted @ 2022-10-29 10:58  shany212  阅读(49)  评论(0编辑  收藏  举报