【发布时间】:2018-10-11 17:50:59
【问题描述】:
我正在尝试创建一个函数来打印每行的所有最大元素的总和。我编写了一个函数,它打印 2D 数组的 5 个最大元素,为了计算总和,我需要将所有最大元素放入一个数组中。现在我不知道为什么我的代码显示不正确的值,如果您能提供任何帮助,我将不胜感激。
#include <stdio.h>
#define MATRIX_SIZE 5
void bubleSort(int arr[MATRIX_SIZE][MATRIX_SIZE])
{
for (int i = 0; i < MATRIX_SIZE; i++)
{
for (int j = 0; j < MATRIX_SIZE; j++)
{
for (int h = j + 1; h < MATRIX_SIZE; h++)
{
if (arr[j][i] > arr[h][i])
{
int tmp = arr[j][i];
arr[j][i] = arr[h][i];
arr[h][i] = tmp;
}
}
}
}
}
int find_max_sum(int arr[MATRIX_SIZE][MATRIX_SIZE])
{
int sum = 0;
for (int i = 0; i < MATRIX_SIZE; i++)
{
int max = arr[i][0];
for (int j = 1; j < MATRIX_SIZE; j++)
{
if (max < arr[i][j])
{
max = arr[i][j];
}
}
printf("%d-th row max = %d\n", i + 1, max);
sum += max;
}
return sum;
}
int printing(int arr[MATRIX_SIZE][MATRIX_SIZE])
{
for (int i = 0; i < MATRIX_SIZE; i++)
{
for (int j = 0; j < MATRIX_SIZE; j++)
{
printf("%5.0d", arr[i][j]);
}
printf("\n");
}
puts("\n");
return 0;
}
int main() {
int arr[MATRIX_SIZE][MATRIX_SIZE] = {
{ 12, 7, 23, 13, 4 },
{ 67, 15, 34, -5, 9 },
{ 2, 5, 17, -23, 45 },
{ 26, -6, 23, -5, -9 },
{ 18, 37, -8, 26, 12 }
};
printing(arr);
printf("\nSum of max elements of 2d array = %d\n", find_max_sum(arr));
bubleSort(arr);
printing(arr);
printf("\nSum of max elements of 2d array = %d\n", find_max_sum(arr));
}
(更新)
我的任务是排序和打印每行的最大元素并打印它们的总和,但我必须在单独的函数中打印它,我必须至少有 3 个函数 - sort、maxElementOfEachRow、Sum(maxElementOfEachRow),这就是为什么我问过将最大元素推入数组以在下一个函数 Sum 中使用它还是有其他方法可以解决这个问题?
【问题讨论】:
-
您无需排序即可找到最大值。它需要一个简单的数据传递。
-
提示:不要创建名称类似于
n的全局常量。这并没有描述它是什么、做什么或意味着什么。而是使用MATRIX_SIZE之类的东西。 -
此外,您的排序是没有意义的,因为在
maxEl中您无论如何都会读取整个数组。只需将max = arr[i][0];放在内部循环之前。
标签: c arrays sorting max bubble-sort