Поиск ведущего элемента в матрице с наименьшим номером столбца - PullRequest
0 голосов
/ 02 января 2019

Мне нужно найти первый ведущий элемент (первое число в строке, отличное от 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 - это просто функция, которая дает мне наименьший столбец каждый раз, когда я нахожу место без нуля.

1 Ответ

0 голосов
/ 02 января 2019

Строка 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...