选一个面试分数绝对值(必须还是32位整数)最大的MM

C语言 码拜 9年前 (2015-05-11) 1441次浏览 0个评论

Description
某个光头的戴眼镜的很帅的老师虽然很喜欢教书,但是迫于生活压力,不得不想办法在业余时间挣点外快以养家糊口。

“做什么比较挣钱呢?筛沙子没力气,看大门又不够凶…”光头眼镜帅老师很是无奈。

“张艺谋比你还难看,现在多有钱呀,听说还要导演奥运开幕式呢!你为什么不去娱乐圈发展呢?”CLZ在一旁出主意。

嗯,也是,为了生存,就委屈点到娱乐圈混混吧,马上就拍一部3D电影《二十二世纪杀人网络之红客帝国之三更半夜翻墙回宿舍》。

说干就干,马上海选女主角(跟老谋子学的,此举可以吸引媒体的眼球,哈哈),并且特别规定,演员必须具有AC的基本功,否则直接淘汰。

由于策划师WSG(大师级水王)宣传到位,来应聘的MM很多,当然包括蛋糕妹妹等呼声很高的美女,就连毕了业的人妖师兄都男扮女装来应聘(还好被安全顾问YZY认出,给轰走了),看来娱乐圈比ICPC吸引人呀…

面试那天,刚好来了m*n个MM,站成一个m*n的阵列,副导演CLZ为每个MM打了分数,分数都是32位有符号整数。

一开始光头眼镜帅老师很纳闷:分数怎么还有负的?CLZ解释说,根据选拔规则,头发染成黄色、化妆太浓、穿的太少等等都要扣分数的,扣的多了就可能是负分了,当然,如果发现话语中夹有日语,就直接给-2147483648分了。

分数送上来了,是光头眼镜帅老师做决定的时候了,一个选拔原则是,要选一个面试分数绝对值(必须还是32位整数)最大的MM。

特别说明:如果不幸选中一个负分的MM,也没关系,因为,如果不能吸引你,那要想法恶心你。

Input
输入数据有多组,每组的第一行是两个整数m和n,表示应聘MM的总共的行列数,然后是m行,每行有n个整数,m和n的定义见题目的描述。

0 < m, n ≤ 100000

Output
对于每组输入数据,输出三个整数x,y和s,分别表示选中的MM的行号、列号和分数。

Note:行号和列号从一开始,如果有多个MM的分数绝对值一样,那么输出排在最前面的一个(即行号最小的那个,如果行号相同则取列号最小的那个)。

Sample Input
2 3
1 4 -3
-7 3 0

Sample Output
2 1 -7

Hint
测试数据的 m 和 n 不会同时达到100000,当m取100000时,n很小,反之亦然,因此,可考虑采用动态内存分配来建立二维数组,这样就不会超内存。

另一种更好的处理方法是:不采用二维数组来存储每个人的得分,照样可以处理得到正确答案。

以下是本人代码:

程序代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
long x,max,px,rx;
int m,n,h,l,i,t;

while(scanf(“%d%d”,&m,&n)==2)
{
for(i=1; i<=m; i++)
for(t=1; t<=n; t++)
{
if(i==1&&t==1)
{
scanf(“%ld”,&x);
rx=x;/*原先的x*/
px=labs(x);
max=px;
h=1;
l=1;
}
else
{
scanf(“%ld”,&x);
px=labs(x);
if(px>max)
{
max=px;
rx=x;
h=i;
l=t;
}
}

}
printf(“%d %d %ld\n\n”,h,l,rx);

}

return 0;

}

提交后是wrong answer。。。求各位大神不啬赐教/抱拳(我是想学到更多知识,并不是想要求正确代码,只求大神们指点指点,谢谢)

楼主的思路和代码都不错,再注意一些细节就行了。
比如,题目已经说了,“就直接给-2147483648分了”,那么试试这个数据:
1 2
-2147483648 1建议把px的类型改成unsigned long

你好,按你说的把px的类型改成unsigned long后,
输入测试数据1 2 -2147483648 1答案符合题意,但如果输入测试数据为题目的测试用例的话,答案就出错了。麻烦再看看是否有其他地方的错误,谢谢

顺便请问题目中“32位有符号整数”是什么意思?

你好,刚才理解错了你的意思,很抱歉,后来我只把px的类型改成unsigned long后,提交后就对了,请问为什么只需要更改px的类型,麻烦结合这道题目解释一下,本人菜鸟不想只是做对了一道题而已,很希望学到更多知识,谢谢
引用 2 楼 ma815841356 的回复:

你好,按你说的把px的类型改成unsigned long后,
输入测试数据1 2 -2147483648 1答案符合题意,但如果输入测试数据为题目的测试用例的话,答案就出错了。

麻烦再看看是否有其他地方的错误,谢谢

顺便请问题目中“32位有符号整数”是什么意思?

不会吧?我试过了,没错呀。你的输出是什么?
“32位有符号整数”就是4字节的整数,范围是2147483647 ~ -2147483648, 现在一般的编译器的int类型应该就是。
http://blog.csdn.net/xuexiacm/article/details/8122267

引用 4 楼 brookmill 的回复:
Quote: 引用 2 楼 ma815841356 的回复:

你好,按你说的把px的类型改成unsigned long后,
输入测试数据1 2 -2147483648 1答案符合题意,但如果输入测试数据为题目的测试用例的话,答案就出错了。

麻烦再看看是否有其他地方的错误,谢谢

顺便请问题目中“32位有符号整数”是什么意思?

不会吧?我试过了,没错呀。你的输出是什么?
“32位有符号整数”就是4字节的整数,范围是2147483647 ~ -2147483648, 现在一般的编译器的int类型应该就是。
http://blog.csdn.net/xuexiacm/article/details/8122267

你好,原先理解错了你的意思,很抱歉,后来我只把px的类型改成unsigned long后,提交后就对了,想请问一下为什么只需要更改px的类型,那max不需要也改成unsigned long吗?本人菜鸟不想只是做对了一道题而已,很希望学到更多知识,谢谢

40分
你说的对,max也应该改过来才是正解。
不改为什么也不出错呢?我觉得原因是这样的:max不改,那么把2147483648赋值给它的时候,实际上已经超出了long的范围,变成了一个负数。但是,接下来if(px>max),涉及到一个有符号数和无符号数的比较,需要先把有符号数转换从无符号数,max这个负数就又变回到2147483648了。
http://blog.csdn.net/zdl1016/article/details/2507743
引用 6 楼 brookmill 的回复:

你说的对,max也应该改过来才是正解。
不改为什么也不出错呢?我觉得原因是这样的:max不改,那么把2147483648赋值给它的时候,实际上已经超出了long的范围,变成了一个负数。但是,接下来if(px>max),涉及到一个有符号数和无符号数的比较,需要先把有符号数转换从无符号数,max这个负数就又变回到2147483648了。
http://blog.csdn.net/zdl1016/article/details/2507743

受教了,谢谢


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明选一个面试分数绝对值(必须还是32位整数)最大的MM
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!