求c中二维数组一列的最大和
Find the maximum sum of a column of two dimensional arrays in c
我有一个二维数组,我想对列求和,然后求和的最大值。我使用 malloc
作为数组进行初始化。当程序完成时我想打印结果,但结果与我期望的不同。
结果->
2 sum is -> 2 max is -> 4201200
5 sum is -> 7 max is -> 4201200
6 sum is -> 13 max is -> 4201200
8 sum is -> 8 max is -> 4201200
9 sum is -> 17 max is -> 4201200
6 sum is -> 23 max is -> 4201200
5 sum is -> 5 max is -> 4201200
9 sum is -> 14 max is -> 4201200
2 sum is -> 16 max is -> 4201200
max is 4201200 column 0
这是我的代码--->
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int row = 3, col = 5;
int *a = (int *)malloc(row * col * sizeof(int));
int i, j;
for (i = 0; i < row; i++)
for (j = 0; j < col; j++)
*(a + i * col + j) = (rand() % (10 - 1 + 1)) + 1;
printf("The array elements are:\n");
int sad;
int max1;
int sum = 0;
for (i = 0; i < row; i++) {
for (j = 0; j < row; j++) {
printf("%d ", a[j * col + i]);
sum += a[j * col + i];
printf("sum is -> %d max is -> %d\n", sum, max1);
}
if (sum > max1) {
printf("max is detected");
max1 = sum;
sad = j;
sum = 0;
}
sum = 0;
}
printf("max is %d column %d", max1, sad);
free(a);
return 0;
}
谢谢!
max1
未初始化,因此测试 if (sum > max1)
没有意义并且 max1
可能无法正确更新。在你的例子中,max1
恰好有值 4201200
,但行为是未定义的,这可能是任何值,甚至是某些系统上的陷阱值。
由于所有矩阵元素都是正数,可以将max1
初始化为0
,否则就使用<limits.h>
中定义的INT_MIN
或者为第一个添加测试列。
另外,在第二个循环中索引值i
和j
被交换了,循环测试也不正确。
这是修改后的版本:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int rows = 3, cols = 5;
int *a = (int *)malloc(rows * cols * sizeof(int));
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
a[i * cols + j] = (rand() % (10 - 1 + 1)) + 1;
}
}
printf("The array elements are:\n");
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf(" %2d", a[i * cols + j]);
}
printf("\n");
}
int max_col = 0;
int max_sum = 0;
for (int j = 0; j < cols; j++) {
int sum = 0;
for (int i = 0; i < rows; i++) {
sum += a[i * cols + j];
}
printf("sum of column %i is -> %d\n", j, sum);
if (j == 0 || sum > max_sum) {
printf("max is detected\n");
max_sum = sum;
max_col = j;
}
}
printf("max is %d column %d\n", max_col, max_sum);
free(a);
return 0;
}
我有一个二维数组,我想对列求和,然后求和的最大值。我使用 malloc
作为数组进行初始化。当程序完成时我想打印结果,但结果与我期望的不同。
结果->
2 sum is -> 2 max is -> 4201200
5 sum is -> 7 max is -> 4201200
6 sum is -> 13 max is -> 4201200
8 sum is -> 8 max is -> 4201200
9 sum is -> 17 max is -> 4201200
6 sum is -> 23 max is -> 4201200
5 sum is -> 5 max is -> 4201200
9 sum is -> 14 max is -> 4201200
2 sum is -> 16 max is -> 4201200
max is 4201200 column 0
这是我的代码--->
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int row = 3, col = 5;
int *a = (int *)malloc(row * col * sizeof(int));
int i, j;
for (i = 0; i < row; i++)
for (j = 0; j < col; j++)
*(a + i * col + j) = (rand() % (10 - 1 + 1)) + 1;
printf("The array elements are:\n");
int sad;
int max1;
int sum = 0;
for (i = 0; i < row; i++) {
for (j = 0; j < row; j++) {
printf("%d ", a[j * col + i]);
sum += a[j * col + i];
printf("sum is -> %d max is -> %d\n", sum, max1);
}
if (sum > max1) {
printf("max is detected");
max1 = sum;
sad = j;
sum = 0;
}
sum = 0;
}
printf("max is %d column %d", max1, sad);
free(a);
return 0;
}
谢谢!
max1
未初始化,因此测试 if (sum > max1)
没有意义并且 max1
可能无法正确更新。在你的例子中,max1
恰好有值 4201200
,但行为是未定义的,这可能是任何值,甚至是某些系统上的陷阱值。
由于所有矩阵元素都是正数,可以将max1
初始化为0
,否则就使用<limits.h>
中定义的INT_MIN
或者为第一个添加测试列。
另外,在第二个循环中索引值i
和j
被交换了,循环测试也不正确。
这是修改后的版本:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int rows = 3, cols = 5;
int *a = (int *)malloc(rows * cols * sizeof(int));
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
a[i * cols + j] = (rand() % (10 - 1 + 1)) + 1;
}
}
printf("The array elements are:\n");
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf(" %2d", a[i * cols + j]);
}
printf("\n");
}
int max_col = 0;
int max_sum = 0;
for (int j = 0; j < cols; j++) {
int sum = 0;
for (int i = 0; i < rows; i++) {
sum += a[i * cols + j];
}
printf("sum of column %i is -> %d\n", j, sum);
if (j == 0 || sum > max_sum) {
printf("max is detected\n");
max_sum = sum;
max_col = j;
}
}
printf("max is %d column %d\n", max_col, max_sum);
free(a);
return 0;
}