1215787625 发表于 2023-11-13 13:01:07

小白求助

输入
一行输入一个正整数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 = {{0}};
       
        scanf("%d",&row);
        for (i = 0,k = 0;i < row;i++){//输入数据并存储在array数组中
                if (ch == '\n')
                        ch = ',';
                while (ch == ',' && scanf("%d",&array))
                        ch = getchar();
        }
       
        int key = 0;        //查找最大整数
        for (i = 0;i < row;i++){
                for (k = 0;array != 0;k++){
                        if (array > key)
                                key =array;
                }
        }
        printf("%d\n",key);
       
        //查找最大整数所在行列数
        int ROW = {0},t = 0;
        for (i = 0;i < row;i++){
                for (k = 0;array != 0;k++){
                        if (array == key){
                                ROW = i+1;
                                break;
                        }
                }
        }

        for (i = 0;i < t;i++){
                printf(i == 0 ? "%d" : ",%d",ROW);
        }
       
        return 0;
}
请问为什么输出不了1,3,6?

isdkz 发表于 2023-11-13 13:01:19

你的程序有一个小错误,导致输出不符合预期。在存储输入数据时,你在每行的末尾没有将列数重置为0,导致后续行的数据被存储在前一行的后面。这样会导致查找最大整数所在行列数时出现错误。

你可以在每行的循环结束后将k重置为0,即 k = 0; ,这样就能正确存储每行的数据了。

修改后的代码如下:

#include <stdio.h>
int main(void)
{
      int row,i,k;
      char ch = ',';
      int array = {{0}};
      
      scanf("%d",&row);
      for (i = 0;i < row;i++){//输入数据并存储在array数组中
                if (ch == '\n')
                        ch = ',';
                while (ch == ',' && scanf("%d",&array[ i]))
                        ch = getchar();
                k = 0; // 重置列数为0
      }
      
      int key = 0;      //查找最大整数
      for (i = 0;i < row;i++){
                for (k = 0;array[ i] != 0;k++){
                        if (array[ i] > key)
                              key =array[ i];
                }
      }
      printf("%d\n",key);
      
      //查找最大整数所在行列数
      int ROW = {0},t = 0;
      for (i = 0;i < row;i++){
                for (k = 0;array[ i] != 0;k++){
                        if (array[ i] == key){
                              ROW = i+1;
                              break;
                        }
                }
      }

      for (i = 0;i < t;i++){
                printf(i == 0 ? "%d" : ",%d",ROW[ i]);
      }
      
      return 0;
}


这样修改后,你的程序就能正确输出1,3,6了。

Mike_python小 发表于 2023-11-13 13:01:56

在您提供的代码中,存在一些问题导致无法正确输出预期结果。主要问题点包括:

1. 第一个 scanf 后面的字符处理逻辑可能会导致错误。
2. 查找最大整数和最大整数所在行列数的逻辑存在问题。

下面是修改后的 C 代码:


#include <stdio.h>

int main(void)
{
    int row, i, k;
    char ch = ',';
    int array = {{0}};

    scanf("%d", &row);
   
    for (i = 0; i < row; i++) {
      k = 0;
      while (1) {
            scanf("%d", &array);
            if (getchar() == '\n')
                break;
      }
    }

    // 查找最大整数
    int maxNum = 0;
    for (i = 0; i < row; i++) {
      for (k = 0; array != 0; k++) {
            if (array > maxNum)
                maxNum = array;
      }
    }
    printf("%d\n", maxNum);

    // 查找最大整数所在行数
    int rowNumbers, count = 0;
    for (i = 0; i < row; i++) {
      for (k = 0; array != 0; k++) {
            if (array == maxNum) {
                rowNumbers = i + 1;
                break;
            }
      }
    }

    for (i = 0; i < count; i++) {
      printf(i == 0 ? "%d" : ",%d", rowNumbers);
    }

    return 0;
}


以上是修改后的 C 代码,应该可以正确输出期望的结果。如果还有其他问题,请随时提出。
页: [1]
查看完整版本: 小白求助