我需要找到最小列中的第一个前导元素(行中的第一个数字与0不同)。
例如,在矩阵{(0, 2, 2), (2, 3, 5), (0, 2, 5)}
中,前导元素为2:第二行,第一列。
在矩阵{(0, 0, 6), (0, 0, 5), (0, 0, 2)}
中,前导元素为6。
bool find_leading_elements(double a[][M], int n, int m, int *row, int *column) {
int i, j, first_j = 0, count = 0;
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
if (a[i][j] != 0)
first_j = min(first_j, j);
else
count++;
}
}
if (count == n * m)
return false;
else {
*row = i;
*column = first_j;
return true;
}
}
我写了这段代码,正确地给了我最小的列,但是我不确定如何获得正确的行。你有什么建议吗?
注意:在min(first_j, j)
,min
只是一个函数,每当我找到一个不为零的位置时,它就会为我提供最小的列。>
答案 0 :(得分:0)
第double a[][M]
行应为int (*a)[3]
您可以检查a[0][0]
,a[1][0]
,a[2][0]
,a[0][1]
,.....中的每个元素,直到a[i][j] != 0
或结束为止
以下code
可以工作:
#include <stdio.h>
#include <stdbool.h>
bool find_leading_elements(int (*a)[3], int n, int m, int* row, int* col) {
for (int j = 0; j != m; ++j)
for (int i = 0; i != n; ++i)
if (a[i][j] != 0) {
*row = i;
*col = j;
return true;
}
return false;
}
int main() {
int a[3][3] = {
{0, 2, 2},
{2, 3, 5},
{0, 2, 5}
};
int row;
int col;
if (find_leading_elements(a, 3, 3, &row, &col))
printf("row= %d col = %d \n", row, col);
else
printf("No answer\n");
return 0;
}