奇点QIDIAN 2023-12-06 16:17 采纳率: 0%
浏览 6

PTA 查找二维数组中的最大值及其行列下标 有一个测试点错误


#include <stdio.h>
int  FindMaxbyCol(int *q,int row,int col,int *maxRow,int *maxCcol);
int main(void)
{
    int m,n;
    scanf("%d%d",&m,&n);
    int a[m][n];
    int max,maxr,maxc;
    int i,j;
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
            scanf("%d",&a[i][j]);   
    }
     max=FindMaxbyCol(a[0],m,n,&maxr,&maxc);
    printf("%d %d %d\n",max,maxr,maxc);
    return 0;
}

/* 请在这里填写答案 */
#include<math.h>
int  FindMaxbyCol(int *q,int row,int col,int *maxRow,int *maxCcol)
{
    int i,j,max;
    max=*q;
    *maxRow=0;
    *maxCcol=0;
        for(j=1;j<col*row;j++)
        {
            if(max<*(q+j))
            {
                max=*(q+j);
                i=j;
            }
        }
    *maxRow=abs(i/col);
    *maxCcol=abs(i%col);
    return max;
}

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-12-06 18:24
    关注

    【以下回答由 GPT 生成】

    这个代码存在两个问题:

    1. 在函数FindMaxbyCol中,没有对变量i进行初始化。这会导致无法正确计算最大值的行和列下标。为了解决这个问题,我们可以在函数最开始给i一个初始值,例如i = 0

    2. 在函数FindMaxbyCol中,计算最大值的行和列下标的公式有误。当前使用的公式*maxRow = abs(i/col); *maxCol = abs(i%col);会导致最大值的列下标始终为正数。然而,这是一个错误的做法,因为行和列下标应该从0开始。为了解决这个问题,我们可以去掉abs()函数,直接将下标赋值给*maxRow*maxCol

    下面是修改后的代码:

    #include <stdio.h>
    
    // 函数原型声明
    int FindMaxbyCol(int *q, int row, int col, int *maxRow, int *maxCol);
    
    int main(void)
    {
        int m, n;
        scanf("%d%d", &m, &n);
    
        // 定义二维数组
        int a[m][n];
    
        int max, maxRow, maxCol;
        int i, j;
    
        // 输入数组元素
        for (i = 0; i < m; i++)
        {
            for (j = 0; j < n; j++)
                scanf("%d", &a[i][j]);
        }
    
        // 调用函数查找最大值及其行列下标
        max = FindMaxbyCol(a[0], m, n, &maxRow, &maxCol);
    
        // 输出结果
        printf("%d %d %d\n", max, maxRow, maxCol);
    
        return 0;
    }
    
    // 函数定义:查找二维数组中的最大值及其行列下标
    int FindMaxbyCol(int *q, int row, int col, int *maxRow, int *maxCol)
    {
        int i = 0, j, max;
        max = *q;
        *maxRow = 0;
        *maxCol = 0;
    
        for (j = 1; j < col * row; j++)
        {
            if (max < *(q + j))
            {
                max = *(q + j);
                i = j;
            }
        }
    
        *maxRow = i / col;
        *maxCol = i % col;
    
        return max;
    }
    


    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 12月6日