qq_31956465 2015-10-18 03:17 采纳率: 75%
浏览 4733
已采纳

一道二维数组的ACM题,刚开始接触二维数组,求解答

这是题目
Description
potato老师虽然很喜欢教书,但是迫于生活压力,不得不想办法在业余时间挣点外快以养家糊口。 “做什么比较挣钱呢?筛沙子没力气,看大门又不够帅...”potato老师很是无奈。 “张艺谋比你还难看,现在多有钱呀,听说还要导演奥运开幕式呢!你为什么不去娱乐圈发展呢?”lwg在一旁出主意。 嗯,也是,为了生存,就委屈点到娱乐圈混混吧,马上就拍一部激光电影《回来我的爱》。 说干就干,马上海选女主角(和老谋子学的,此举可以吸引媒体的眼球,呵呵),并且特别规定,演员必须具有ac的基本功,否则直接out! 由于策划师风之鱼(大师级水王)宣传到位,来应聘的MM很多,当然包括nit的蛋糕妹妹等呼声很高的美女,就连zsu的jqw都男扮女装来应聘(还好被安全顾问hdu_Bin-Laden认出,给轰走了),看来娱乐圈比acm还吸引人哪... 面试那天,刚好来了m*n个MM,站成一个m*n的队列,副导演Fe(OH)2为每个MM打了分数,分数都是32位有符号整数。 一开始我很纳闷:分数怎么还有负的?Fe(OH)2解释说,根据选拔规则,头发染成黄色、化妆太浓、穿的太少等等都要扣分数的,扣的多了就可能是负分了,当然,如果发现话语中夹有日语,就直接给-2147483648分了。 分数送上来了,是我做决定的时候了,我的一个选拔原则是,要选一个面试分数绝对值(必须还是32位整数)最大的MM。 特别说明:如果不幸选中一个负分的MM,也没关系,因为我觉得,如果不能吸引你,那要想法恶心你。

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

Output
对于每组输入数据,输出三个整数x,y和s,分别表示选中的MM的行号、列号和分数。 note:行号和列号从1开始,如果有多个MM的分数绝对值一样,那么输出排在最前面的一个(即行号最小的那个,如果行号相同则取列号最小的那个)。

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

下面是我的一段代码
#include
#include
using namespace std;
int main()
{
int n, m, i, j, a[100][100]; double b, c,d ,h=0,l=0;
while (cin >> n >> m)
{
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
cin >> a[i][j];
}
//输入全部分数,并且代给相应数组
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
c = a[i][j]; b = a[0][0];
if (labs(b) < labs(c))
{
h = i+1; l = j+1;//行数h,列数l
a[0][0] = c;//将绝对值最大的数换给数组a【0】【0】

        }
    }
    cout << h << " " << l << " " << a[0][0] << endl;//输出行数,列数,该值
}
return 0;

}

对照着书本来做的,但是总得不到正确的输出,不知道哪里出现了问题,希望能帮我点出还有二维数组需要注意些什么

  • 写回答

2条回答 默认 最新

  • cxlovu 2015-10-18 04:54
    关注

    lz的意思是还要我帮你改陷阱咯= =
    不做acm好多年了还特地跑去平台交了一遍,ac了
    这种问题lz多考虑边界,坑= =

      #include <iostream>
    #include <math.h>
    using namespace std;
    int main(){
        int n, m, i, j, a[105][105];
        double b, c,d ,h=0,l=0;
        while (cin >> n >> m){
            for (i = 0; i < n; i++){
                for (j = 0; j < m; j++)
                cin >> a[i][j];
            }
            //输入全部分数,并且代给相应数组
            for (i = 0; i < n; i++){
                for (j = 0; j < m; j++){
                    c = a[i][j]; 
                    b = a[0][0];
                    if (labs(b) < labs(c)){
                        h = i+1;
                        l = j+1;//行数h,列数l
                        a[0][0] = c;//将绝对值最大的数换给数组a[0][0]
                    }
                }
            }
            cout << h << " " << l << " " << a[0][0] << endl;//输出行数,列数,该值
        }
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥50 opencv4nodejs 如何安装
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥15 复杂网络,变滞后传递熵,FDA