Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Maonezis
0 / 0 / 0
Регистрация: 27.01.2019
Сообщений: 7
1

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

27.01.2019, 13:45. Просмотров 496. Ответов 9
Метки нет (Все метки)

Разработать программу, которая переставляет строки целочисленной квадратной матрицы так, чтобы элементы ее главной диагонали образовали неубывающую последовательность. Значения элементов матрицы генерируются случайным образом в диапазоне [-99, 99], размер матрицы вводится пользователем.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.01.2019, 13:45
Ответы с готовыми решениями:

Переставить столбцы матрицы так, чтобы элементы её побочной диагонали образовали невозрастающую последовательность
Здравствуйте, имеется следующее задание: Разработать программу, которая переставляет столбцы...

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

Переставить столбцы массива так , чтобы их максимальные элементы образовали возрастающую последовательность
Объявите двумерный целочисленный массив, в котором n строк по m элементов. Выполните генерацию...

Переставить строки матрицы так, чтобы наименьший элемент находился на главной диагонали
задать двумерный массив размером 4 на 4. массив заполняется целыми числами случайным образом. в...

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

9
Байт
Эксперт C
21303 / 13469 / 2839
Регистрация: 24.12.2010
Сообщений: 28,558
27.01.2019, 15:54 2
А задачка-то нетривиальная! Но в общем случае решения не имеет. Пример
Код
2 4
5 3
1
valen10
Параллельный Кот
1264 / 532 / 211
Регистрация: 25.03.2016
Сообщений: 1,186
Завершенные тесты: 1
27.01.2019, 15:59 3
Байт, наверное такой пример? Строки же переставляем.
Код
3 4
5 2
1
Байт
Эксперт C
21303 / 13469 / 2839
Регистрация: 24.12.2010
Сообщений: 28,558
27.01.2019, 16:03 4
То есть по сути дела надо или найти такую перестановку, или показать, что ее не существует.
ничего более умного, чем генерировать все перестановки и проверять каждую, в голову не приходит.

Добавлено через 2 минуты
valen10, Да, конечно. Написал на бумажке сначала тройку, потом замазал ее единицей, но как-то неаккуратно, и в итоге неправильно переписал...
0
27.01.2019, 16:03
SomniPhobia
352 / 256 / 101
Регистрация: 22.11.2017
Сообщений: 707
27.01.2019, 16:32 5
Привет!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <iostream>
#include <windows.h>
#include <vector>
#include <ctime>
#include <iomanip>
#include <algorithm>
 
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    srand(time(NULL));
    system("color 0A");
 
    int left = -99,
        right = 99;
    cout << "Введите сторону матрицы ";
    size_t n;
    cin >> n;
    for (size_t count = 0u; count < 10u; ++count)
    {
        vector<vector<int>> box(n);
        cout << endl;
        cout << "Исходная матрица" << endl;
        for (auto &str : box)
        {
            vector<int> filler(n);
            for (auto &value : filler)
            {
                cout << setw(5u) << (value = left + rand() % (right - left + 1));
            }
            cout << endl;
            str = filler;
        }
        cout << endl;
        //Столбик
        for (size_t u = 0u; u < n; ++u)
        {
            size_t min_ind = 0u;
            int min_value = 100;
            //Строка
            for (size_t p = u; p < n; ++p)
            {
                if (box[p][u] < min_value)
                {
                    min_value = box[p][u];
                    min_ind = p;
                }
            }
            //cout << "min_value = " << min_value << " min_ind = " << min_ind << endl;
            swap(box[min_ind], box[u]);
        }
        size_t offset = 0u;
        auto flag = true;
        for (long long u = 1; u < n; ++u)
        {
            if (box[u - 1][u - 1] > box[u][u])
            {
                flag = false;
                break;
            }
        }
        if (flag)
        {
            cout << "Преобразованная матрица" << endl;
            for (const auto &str : box)
            {
                for (const auto &value : str)
                {
                    cout << setw(5u) << value;
                }
                cout << endl;
            }
        }
        else
        {
            cout << "Преобразование НЕ возможно" << endl;
        }
        cout << endl;
        cout << endl;
    }
 
    system("pause");
    return 0;
}
0
Миниатюры
Переставить строки матрицы так чтобы элементы главной диагонали образовали неубывающую последовательность  
valen10
Параллельный Кот
1264 / 532 / 211
Регистрация: 25.03.2016
Сообщений: 1,186
Завершенные тесты: 1
27.01.2019, 16:43 6
SomniPhobia, второй пример со скрина.
Код
(1) -63       8     -14     -34
(2)  79     -86     -52      55
(3) -86      96     -49     -52
(4) -82     -48      65     -61

(3) -86      96     -49     -52
(4) -82     -48      65     -61
(1) -63       8     -14     -34
(2)  79     -86     -52      55
Добавлено через 3 минуты
Как я понял, вы сделали сортировку выбором с последующей проверкой?
0
SomniPhobia
352 / 256 / 101
Регистрация: 22.11.2017
Сообщений: 707
27.01.2019, 16:46 7
valen10, Мой код даже такую матрицу неправильно переставит
2 5
3 1
Сами решайте. В чём вопрос? Задача слишком сложная для меня, если только все варианты перебирать, как говорит Байт.
0
valen10
Параллельный Кот
1264 / 532 / 211
Регистрация: 25.03.2016
Сообщений: 1,186
Завершенные тесты: 1
27.01.2019, 16:52 8
Цитата Сообщение от SomniPhobia Посмотреть сообщение
Сами решайте. В чём вопрос?
Поспокойнее, пожалуйста. Думал, вам интересно найти решение, вот и попробовал обсуждение начать. Не хотите - не надо.
0
ReDoX
439 / 327 / 170
Регистрация: 01.07.2015
Сообщений: 1,162
27.01.2019, 17:02 9
Цитата Сообщение от SomniPhobia Посмотреть сообщение
все варианты перебирать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include <cctype>
#include <cerrno>
#include <cfloat>
#include <ciso646>
#include <climits>
#include <clocale>
#include <cmath>
#include <csetjmp>
#include <csignal>
#include <cstdarg>
#include <cstddef>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <cfenv>
#include <cinttypes>
#include <cstdint>
#include <cwchar>
#include <cwctype>
 
#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <locale>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <typeinfo>
#include <utility>
#include <valarray>
#include <vector>
#include <array>
#include <atomic>
#include <chrono>
#include <condition_variable>
#include <forward_list>
#include <future>
#include <initializer_list>
#include <mutex>
#include <random>
#include <ratio>
#include <regex>
#include <scoped_allocator>
#include <system_error>
#include <thread>
#include <tuple>
#include <typeindex>
#include <type_traits>
#include <unordered_map>
#include <unordered_set>
 
using namespace std;
 
#define int long long int 
 
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cout.precision(9);
 
  int n;
  int m;
  cin >> n >> m;
 
  vector<vector<int>> a(n, vector<int>(m));
 
  random_device rd;
  mt19937 eng(rd());
  uniform_int_distribution<int> dist(-99, 99);
 
  for (auto& i : a) {
    for (auto& j : i)
      j = dist(eng);
  }
 
  for (const auto& i : a) {
    copy(cbegin(i), cend(i), ostream_iterator<int>(cout, " "));
 
    cout << '\n';
  }
 
  vector<int> p(n);
  iota(begin(p), end(p), 0);
 
  do {
    vector<vector<int>> cur(n, vector<int>(m));
 
    for (int i = 0; i < n; ++i)
      cur[i] = a[p[i]];
 
    vector<int> diag(n);
 
    for (int i = 0; i < n; ++i)
      diag[i] = cur[i][i];
 
    if (is_sorted(cbegin(diag), cend(diag))) {
      for (const auto& i : cur) {
        copy(cbegin(i), cend(i), ostream_iterator<int>(cout, " "));
 
        cout << '\n';
      }
 
      break;
    }
  } while (next_permutation(begin(p), end(p)));
}
0
Maonezis
0 / 0 / 0
Регистрация: 27.01.2019
Сообщений: 7
05.02.2019, 17:15  [ТС] 10
Можете скинуть программу ?

Добавлено через 50 секунд
Можете скинуть готовый проект ?
0
05.02.2019, 17:15
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.02.2019, 17:15

Переставьте столбцы массива так, чтобы их максимальные элементы образовали возрастающую последовательность
Объявите двумерный целочисленный массив, в котором n строк по m элементов. Выполните генерацию...

Переставьте столбцы массива так, чтобы их максимальные элементы образовали возрастающую последовательность
Объявите двумерный целочисленный массив, в котором n строк по m элементов. Выполните генерацию...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.