【发布时间】: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 = 24和9 + 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 的命运提供更多确定性。