В матрице удалить строки с элементами на главной диагонали, превышающими заданную величину

В матрице удалить строки с элементами на главной диагонали, превышающими заданную величину, а затем в качестве первой вставить строку из максимальных элементов соответствующих столбцов.(Для размещения массивов следует использовать динамическую память).

code: #c
  1. #include <cstdio>
  2. #include <vector>
  3. using std::vector;
  4.  
  5. vector< vector<int> > major; // data array
  6. int x, y; // size of arraiy
  7. int limit; // if value in diagonal is more than this remove it's row
  8.  
  9. void print () {
  10.    int ix, iy (0);
  11.    do {
  12.       ix = 0;
  13.       do {
  14.          printf ("%d ", major[iy][ix]);
  15.       } while (++ix != x);
  16.       putchar ('\n');
  17.    } while (++iy != y);
  18. };
  19.  
  20. void reading () {
  21.    scanf ("%d%d%d", &limit, &x, &y);
  22.    major.resize (y);
  23.    int ix, iy (0); // help variables
  24.    do {
  25.       major[iy].resize (x);
  26.       ix = 0;
  27.       do {
  28.          scanf ("%d", &major[iy][ix]);
  29.       } while (++ix != x);
  30.    } while (++iy != y);
  31. };
  32.  
  33. vector<int> moving () {
  34.    int itd (0); // iterator diagonal
  35.    int ith; // iterator horizontal
  36.    int max (0); // maiximum value in horizontal
  37.    vector<int> result; // array with maximum elements from columns
  38.    do {
  39.       if (major[itd][itd] > limit) { // search for value greater than limit
  40.          ith = 0;
  41.          max = 0;
  42.          do {
  43.             if (major[ith][itd] > max) { max = major[ith][itd]; };
  44.          } while (++ith != y);
  45.          result.push_back (max);
  46.          major.erase (major.begin() + itd);
  47.          --y;
  48.       } else {
  49.          ++itd; // if we remove some row, next one received it's index
  50.       };
  51.    } while ( (itd < x) && (itd < y) );
  52.    return result;
  53. };
  54.  
  55.  
  56. int main() {
  57.    // 1 machen
  58.    
  59.    freopen ("sol.in", "r", stdin); // use your input file within "sol.in"
  60.    reading ();
  61.    vector<int> first (moving());
  62.    if (first.size() < x) { first.insert (first.end(), x - first.size(), 0); }; // adding zeros in end if need
  63.    major.insert (major.begin(), first);
  64.    ++y;
  65.    print ();
  66.    
  67.    // 0 machen */
  68.         return 0;
  69. };

код берёт матрицу из файла.
формат данных: ограничение, количество столбцов (x), количество рядков (y) и сама матрица

пример входного файла
5 4 3 1 2 3 10 4 5 6 11 7 8 9 12

Поделиться:

Похожие статьи: