【问题标题】:C: How to take an input as unknown sized matrixC:如何将输入作为未知大小的矩阵
【发布时间】:2021-04-20 04:44:40
【问题描述】:

问题: 给定一个矩阵 A,逐行计算最大元素的总和(找到每一行的最大元素并取它们的总和)和逐列独立并返回这些值。

输入将是: 第一行包含 n、m 行和列的输入矩阵。 接下来的 n 行包含 m 个整数。

一些例子:

输入1:

3 3
4 3 2 
3 7 7 
2 6 0

输出1:

17 18

输入2:

3 4
1 2 3 4
5 6 7 8
9 10 11 12

输出2:

24 42

我不知道应该如何使用 scanf 获取矩阵输入。请帮忙。

【问题讨论】:

  • scanf() 不理会换行符,除非作为数字之间的分隔符。不过没关系;您可以在每次迭代中读取一个数字,知道它是当前行中的(另一个)数字还是新行的开头。在一行结束时,您可以将您保存的最大行数累积到总和中。您只需要五个变量:列数、行数、当前行中最近的输入数、当前行中的最大值以及最大值的总和。
  • 类似的sscanf usage on matrix of unknown size? @JonathanLeffler -- 那是“新数学”,接受它:) 我认为那是4 + 8 + 12 = 249 + 10 + 11 + 12 = 42。 (最后一列,最后一行)
  • 您是在问"How to take an input as unknown sized matrix?",还是因为在第一行"How to declare storage for a matrix of any given size?" 将行作为列提供给您,在第一种情况下,您会忽略第一行,只是在进行时动态分配,在第二种情况下,您可以简单地为整个矩阵分配开始(使用指针和行分配,或者在单个分配中,然后从单个分配的块中模拟二维数组)
  • @DavidC.Rankin:我部分误读了这个问题。鉴于您还需要在每列中找到最大值,您需要更多变量——可能是一个根据列数调整大小的数组。那可能是一个VLA。或者您可以以某种方式限制所需的大小。
  • 是的,VLA 会提供一个简单的解决方案,但鉴于他们现在的可选支持,VLA 加上一些有保证的替代方案可能是最好的选择。我希望该标准能够为 VLA 的命运提供更多确定性。

标签: arrays c scanf


【解决方案1】:

无论分隔符是换行符还是空格,都只需使用 scanf("%d", &variable):

#include <stdio.h>

int main()
{
    int lines, cols;
    scanf("%d", &lines);
    scanf("%d", &cols);
    for(int y = 0; y < lines; y++){
        for(int x = 0; x < lines; x++){
            int variable;
            scanf("%d", &variable);
            // your code
        }
    }
    // your code
    return 0;
}

【讨论】:

    猜你喜欢
    • 2023-02-09
    • 1970-01-01
    • 2021-02-11
    • 1970-01-01
    • 2015-04-27
    • 2018-09-10
    • 1970-01-01
    • 2017-10-30
    • 2015-08-02
    相关资源
    最近更新 更多