鱼C论坛

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

[已解决]小白求助

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

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

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

x
输入
一行输入一个正整数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\n",key);
       
        //查找最大整数所在行列数
        int ROW[30] = {0},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;i++){
                printf(i == 0 ? "%d" : ",%d",ROW[i]);
        }
       
        return 0;
}
请问为什么输出不了1,3,6?
最佳答案
2023-11-13 13:01:19
你的程序有一个小错误,导致输出不符合预期。在存储输入数据时,你在每行的末尾没有将列数重置为0,导致后续行的数据被存储在前一行的后面。这样会导致查找最大整数所在行列数时出现错误。

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

修改后的代码如下:

  1. #include <stdio.h>
  2. int main(void)
  3. {
  4.         int row,i,k;
  5.         char ch = ',';
  6.         int array[30][100] = {{0}};
  7.         
  8.         scanf("%d",&row);
  9.         for (i = 0;i < row;i++){//输入数据并存储在array数组中
  10.                 if (ch == '\n')
  11.                         ch = ',';
  12.                 while (ch == ',' && scanf("%d",&array[ i][k++]))
  13.                         ch = getchar();
  14.                 k = 0; // 重置列数为0
  15.         }
  16.         
  17.         int key = 0;        //查找最大整数
  18.         for (i = 0;i < row;i++){
  19.                 for (k = 0;array[ i][k+1] != 0;k++){
  20.                         if (array[ i][k] > key)
  21.                                 key =array[ i][k];
  22.                 }
  23.         }
  24.         printf("%d\n",key);
  25.         
  26.         //查找最大整数所在行列数
  27.         int ROW[30] = {0},t = 0;
  28.         for (i = 0;i < row;i++){
  29.                 for (k = 0;array[ i][k+1] != 0;k++){
  30.                         if (array[ i][k] == key){
  31.                                 ROW[t++] = i+1;
  32.                                 break;
  33.                         }
  34.                 }
  35.         }

  36.         for (i = 0;i < t;i++){
  37.                 printf(i == 0 ? "%d" : ",%d",ROW[ i]);
  38.         }
  39.         
  40.         return 0;
  41. }
复制代码


这样修改后,你的程序就能正确输出1,3,6了。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-11-13 13:01:19 | 显示全部楼层    本楼为最佳答案   
你的程序有一个小错误,导致输出不符合预期。在存储输入数据时,你在每行的末尾没有将列数重置为0,导致后续行的数据被存储在前一行的后面。这样会导致查找最大整数所在行列数时出现错误。

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

修改后的代码如下:

  1. #include <stdio.h>
  2. int main(void)
  3. {
  4.         int row,i,k;
  5.         char ch = ',';
  6.         int array[30][100] = {{0}};
  7.         
  8.         scanf("%d",&row);
  9.         for (i = 0;i < row;i++){//输入数据并存储在array数组中
  10.                 if (ch == '\n')
  11.                         ch = ',';
  12.                 while (ch == ',' && scanf("%d",&array[ i][k++]))
  13.                         ch = getchar();
  14.                 k = 0; // 重置列数为0
  15.         }
  16.         
  17.         int key = 0;        //查找最大整数
  18.         for (i = 0;i < row;i++){
  19.                 for (k = 0;array[ i][k+1] != 0;k++){
  20.                         if (array[ i][k] > key)
  21.                                 key =array[ i][k];
  22.                 }
  23.         }
  24.         printf("%d\n",key);
  25.         
  26.         //查找最大整数所在行列数
  27.         int ROW[30] = {0},t = 0;
  28.         for (i = 0;i < row;i++){
  29.                 for (k = 0;array[ i][k+1] != 0;k++){
  30.                         if (array[ i][k] == key){
  31.                                 ROW[t++] = i+1;
  32.                                 break;
  33.                         }
  34.                 }
  35.         }

  36.         for (i = 0;i < t;i++){
  37.                 printf(i == 0 ? "%d" : ",%d",ROW[ i]);
  38.         }
  39.         
  40.         return 0;
  41. }
复制代码


这样修改后,你的程序就能正确输出1,3,6了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-13 13:01:56 | 显示全部楼层
在您提供的代码中,存在一些问题导致无法正确输出预期结果。主要问题点包括:

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

下面是修改后的 C 代码:
  1. #include <stdio.h>
  2. int main(void)
  3. {
  4.     int row, i, k;
  5.     char ch = ',';
  6.     int array[30][100] = {{0}};
  7.     scanf("%d", &row);
  8.    
  9.     for (i = 0; i < row; i++) {
  10.         k = 0;
  11.         while (1) {
  12.             scanf("%d", &array[i][k++]);
  13.             if (getchar() == '\n')
  14.                 break;
  15.         }
  16.     }
  17.     // 查找最大整数
  18.     int maxNum = 0;
  19.     for (i = 0; i < row; i++) {
  20.         for (k = 0; array[i][k] != 0; k++) {
  21.             if (array[i][k] > maxNum)
  22.                 maxNum = array[i][k];
  23.         }
  24.     }
  25.     printf("%d\n", maxNum);
  26.     // 查找最大整数所在行数
  27.     int rowNumbers[30], count = 0;
  28.     for (i = 0; i < row; i++) {
  29.         for (k = 0; array[i][k] != 0; k++) {
  30.             if (array[i][k] == maxNum) {
  31.                 rowNumbers[count++] = i + 1;
  32.                 break;
  33.             }
  34.         }
  35.     }
  36.     for (i = 0; i < count; i++) {
  37.         printf(i == 0 ? "%d" : ",%d", rowNumbers[i]);
  38.     }
  39.     return 0;
  40. }
复制代码

以上是修改后的 C 代码,应该可以正确输出期望的结果。如果还有其他问题,请随时提出。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-21 14:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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