问题描述:
potato老师虽然很喜欢教书,但是迫于生活压力,不得不想办法在业余时间挣点外快以养家糊口。
“做什么比较挣钱呢?筛沙子没力气,看大门又不够帅...”potato老师很是无奈。
“张艺谋比你还难看,现在多有钱呀,听说还要导演奥运开幕式呢!你为什么不去娱乐圈发展呢?”lwg在一旁出主意。
嗯,也是,为了生存,就委屈点到娱乐圈混混吧,马上就拍一部激光电影《杭电记忆——回来我的爱》。
说干就干,马上海选女主角(和老谋子学的,此举可以吸引媒体的眼球,呵呵),并且特别规定,演员必须具有ac的基本功,否则直接out!
由于策划师风之鱼(大师级水王)宣传到位,来应聘的MM很多,当然包括nit的蛋糕妹妹等呼声很高的美女,就连zjut的jqw都男扮女装来应聘(还好被安全顾问hdu_Bin-Laden认出,给轰走了),看来娱乐圈比acm还吸引人哪...
面试那天,刚好来了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的分数绝对值一样,那么输出排在最前面的一个(即行号最小的那个,如果行号相同则取列号最小的那个)。
样例输入:
2 3
1 4 -3
-7 3 0
样例输出:
2 1 -7
分析:
题目很长,但是考点理解起来却比较容易。
考点:比较并输出绝对值最大的值的位置以及值。
所用到的库函数:cmath中的abs()函数。
1、原本想在一个for循环中循环“m*n”次,输出结果,但是发现在一些特殊位置就会出错。所以只好中规中矩地使用两层for循环,外层循环m次,内层循环n次。
2、数组不需要使用,因为,不需要用到排序等对一串值做大量处理的操作,在此处只需要输出绝对值最大的及其位置信息即可。
这样大体框架出来,就可以开始写题了。
代码:
#include<iostream>
#include<stdio.h>
#include<cmath>
int main()
{
int m = 0, n = 0;
while (~scanf_s("%d%d", &m, &n))//循环输入
{
int result = 0, pos_x = 1, pos_y = 1;//需要输出的值及其记录位置的变量
for (int i = 1; i <= m; i++)//注意两个for循环都是从1开始
for (int j = 1; j <= n; j++)
{
int num = 0;
scanf_s("%d", &num);
if(i == 1 && j == 1)//因为在定义记录位置的变量时就已经初始化为1了,所以此时不需要再对记录位置的变量赋值
result = num;
if (abs(num) > abs(result))//如果当前输入的绝对值大于之前输入的绝对值,则将值替换,位置信息也要做相应的修改
{
result = num;
pos_x = i;//因为i和j都是从1开始循环,所以不需要再加1
pos_y = j;
}
}
printf("%d %d %d\n", pos_x, pos_y, result);//输出结果
}
return 0;
}
运行结果:
因为运行时间,运行内存,以及代码长度不是很高,所以就不再优化了。