鱼C论坛

 找回密码
 立即注册
查看: 904|回复: 2

小白求助

[复制链接]
发表于 2023-11-13 11:48:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目描述
输入n行,每行不超过100个无符号整数,无符号数不超过4位。请输出最大整数以及最大整数所在的行号(行号从1开始)。如果该数据在多个行中出现,则按从小到大输出相应行号,行号之间以一个逗号分开。

输入
一行输入一个正整数n(n <= 30)。之后的n行,每行包含不超过100个无符号整数,整数之间以一个逗号分开。
输出
第一行:最大整数; 第二行:最大整数所在的行编号,逗号间隔。
样例输入 复制
6
1,3,5,23,6,8,14
20,22,13,4,16
23,12,17,22
2,6,10,9,3,6
22,21,20,8,10
22,1,23,6,8,19,23
样例输出 复制
23
1,3,6
#include <stdio.h>
int main(void)
{
        int row,i,k;
        char ch = ',';
        int array[30][100] = {{0}};
       
        scanf("%d",&row);
        for (i = 0,k = 0;i < row;i++){//输入数据并存储在array数组中
                if (ch == '\n')
                        ch = ',';
                while (ch == ',' && scanf("%d",&array[i][k++]))
                        ch = getchar();
        }
       
        int key = 0;        //查找最大整数
        for (i = 0;i < row;i++){
                for (k = 0;array[i][k+1] != 0;k++){
                        if (array[i][k] > key)
                                key =array[i][k];
                }
        }
        printf("%d",key);
       
        //查找最大整数所在行列数
        int ROW[30],t = 0;
        for (i = 0;i < row;i++){
                for (k = 0;array[i][k+1] != 0;k++){
                        if (array[i][k] == key){
                                ROW[t++] = i+1;
                                break;
                        }
                }
        }
        for (i = 0;i < t-1;i++){
                printf(i == 0 ? "%d" : ",%d",ROW[i]);
        }
       
        return 0;
}
为什么1,3,6输出不出来?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-13 11:48:26 | 显示全部楼层
这段代码存在一些问题,导致无法正确输出1,3,6。首先,代码中使用了字符ch来记录输入的分隔符,但在输入数据时并没有正确处理换行符。其次,在查找最大整数时,使用了嵌套的for循环,但没有正确处理数组的边界情况,可能导致遗漏最后一个整数。最后,在查找最大整数所在行列数时,没有正确记录行号。

以下是修改后的代码:
#include <stdio.h>
int main(void)
{
    int row, i, k;
    int array[30][100] = {{0}};

    scanf("%d", &row);
    for (i = 0; i < row; i++) {
        for (k = 0; k < 100; k++) {
            if (scanf("%d,", &array[ i][k]) == 0) {
                break;
            }
        }
    }

    int maxNum = 0;
    int maxRows[30];
    int maxRowCount = 0;
    for (i = 0; i < row; i++) {
        for (k = 0; array[ i][k] != 0; k++) {
            if (array[ i][k] > maxNum) {
                maxNum = array[ i][k];
                maxRowCount = 0;
                maxRows[maxRowCount++] = i + 1;
            } else if (array[ i][k] == maxNum) {
                maxRows[maxRowCount++] = i + 1;
            }
        }
    }

    printf("%d\n", maxNum);
    for (i = 0; i < maxRowCount; i++) {
        printf("%d", maxRows[ i]);
        if (i < maxRowCount - 1) {
            printf(",");
        }
    }

    return 0;
}

这段修改后的代码修复了原始代码中的问题,可以正确输出1,3,6。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-13 11:49:23 | 显示全部楼层
在您的代码中,输出最大整数所在的行号时,使用了 ROW 数组来保存行号。但是在初始化 ROW 数组时,没有将其元素全部初始化为 0。因此,当找到最大整数所在的行号时,可能会输出一些未初始化的数值。

为了解决这个问题,您可以在初始化 ROW 数组之前,将其所有元素都设置为 0,例如使用 memset 函数:
#include <string.h> // 添加头文件// ...int ROW[30];memset(ROW, 0, sizeof(ROW)); // 初始化 ROW 数组为 0// ...
通过添加上述代码,将 ROW 数组的所有元素初始化为 0,然后再进行后续的操作,就可以正确输出最大整数所在的行号了。

希望能够帮助到您!如果还有其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 09:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表