С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
88 / 32 / 16
Регистрация: 01.06.2019
Сообщений: 672
1

Отсортировать массив указателей на строки матрицы по убыванию суммы в этих строках

15.10.2019, 19:25. Показов 1825. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пусть у нас есть двумерный массив int a[10][10].
В этом массиве находятся результаты турнира по футболу, в котором участвовало 10 команд. (Т.е. элементы массива - это числа 0,1 или 3).
Заполнить массив указателей int* b[10]; так, чтобы
указатель b[0] указывал на строчку в массиве a, в которой больше всего сумма очков,
b[1] - на строку, в которой сумма очков вторая по величине,
b[2] - на строчку с третьей по величине суммой и т.д.

Помогите исправить:
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
int main ()
{
const unsigned int str = 10, col = 10;
    int a[str][col];
 
    for (int i = 0; i < str; i++) {
        for (int j = 0; j < col; j++) {
            a[i][j] = rand() % 4 + 0;
        }
    }
 
    int* b[10];
    int c[10];
 
    for (int i = 0; i < 10; i++)
    {
        int sum = 0;
        for (int j = 0; j < 10; j++)
            sum += a[i][j];
        c[i] = sum;
    }
 
    for (int i = 0; i < 10; i++)
        b[i] = a[i];
 
    for (int i = 0; i < 9; i++)
        for (int j = i + 1; j < 10; j++)
            if (c[i] < c[j])
            {
                swap(c[i], c[j]);
                swap(b[i], b[j]);
            }
 
    for (int i = 0; i < str; i++) {
        for (int j = 0; j < col; j++) {
            cout << setw(4) << a[i][j];
        }
        cout << endl;
    }
 
    system("pause");
    return 0;
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Блог
15.10.2019, 19:25
Ответы с готовыми решениями:

Отсортировать строки матрицы по возрастанию суммы чисел в этих строках
Дан двумерный массив (N+15)x(N+15) отсортировать строки по возрастанию суммы чисел в этих строках,...

Создать специализацию для шаблона, которая принимает массив указателей на строки и количество этих указателей
Нужно создать специализацию для шаблона, которая принимает массив указателей на строки и количество...

С использованием функций и указателей отсортировать строки массива строк по убыванию
Суть задачи: с использование функций и указателей отсортировать строки массива строк по убыванию....

Отсортировать числа в строках матрицы по количеству делителей и отсортировать строки по сумме цифр
Помогите с программой, пожалуйста В файле 25 чисел. Вывести на экран матрицу 5х5 отсортировав...

6
Диссидент
Эксперт C
27707 / 17325 / 3810
Регистрация: 24.12.2010
Сообщений: 38,979
15.10.2019, 19:30 2
Строчка 24
C++
1
b[i] = i;
А вывод так
C++
1
2
3
4
5
6
    for (int i = 0; i < str; i++) {
        for (int j = 0; j < col; j++) {
            cout << setw(4) << a[b[i]][j];
        }
        cout << endl;
    }
0
88 / 32 / 16
Регистрация: 01.06.2019
Сообщений: 672
15.10.2019, 20:09  [ТС] 3
Цитата Сообщение от Байт Посмотреть сообщение
Строчка 24
Ошибку выдает
0
Диссидент
Эксперт C
27707 / 17325 / 3810
Регистрация: 24.12.2010
Сообщений: 38,979
15.10.2019, 20:12 4
Цитата Сообщение от Rudman132 Посмотреть сообщение
так все нормально?
Ну, я подробно не смотрел и не запускал. Вгладь - нечего'с
0
88 / 32 / 16
Регистрация: 01.06.2019
Сообщений: 672
15.10.2019, 22:39  [ТС] 5
Как эту задачу еще можно реализовать?
0
Just Do It!
4029 / 2423 / 640
Регистрация: 23.09.2014
Сообщений: 7,811
Записей в блоге: 2
16.10.2019, 07:13 6
Лучший ответ Сообщение было отмечено Rudman132 как решение

Решение

Цитата Сообщение от Rudman132 Посмотреть сообщение
Как эту задачу еще можно реализовать?
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
#include <iostream>
#include <ctime>
 
int rrand(int range_max)
{   return rand() % (range_max + 1);
}
 
int main()
{   srand((unsigned int)time(NULL));
 
    const int ROW    = 10;
    const int COLUMN = 11; /// В 11 столбе будем хранить сумму элементов строки.
 
    ///-----------------------------------|
    /// Выделение памяти под таблицу.     |
    ///-----------------------------------:
    int** tab;
    tab = new int*[ROW];
    for(int i = 0; i < ROW; ++i)
    {   tab[i] = new int[COLUMN];
    }
 
    ///-----------------------------------|
    /// Рандомная иницилизация.           |
    ///-----------------------------------:
    for(int i = 0; i < ROW; ++i)
    {   tab[i][COLUMN - 1] = 0;
        for(int j = 0; j < COLUMN - 1; ++j)
        {
            int r = rrand(2);
            switch(r)
            {   case 0: r = 0; break;
                case 1: r = 1; break;
                case 2: r = 3; break;
            }
            tab[i][j] = r;
            tab[i][COLUMN - 1] += r;
        }
    }
 
    ///-----------------------------------|
    /// Сортируем(пузырьком).             |
    ///-----------------------------------:
    int tmp = 0;
    for(int i = 0; i < ROW; i++)
    {   for(int j = (ROW - 1); j >= (i+1); j--)
        {   if(tab[j][COLUMN - 1] > tab[j - 1][COLUMN - 1])
            {   std::swap(tab[j], tab[j-1]);
            }
        }
    }
 
    ///-----------------------------------|
    /// Выводим на экран.                 |
    ///-----------------------------------:
    std::cout << "  | ";
    for(int j = 0; j < COLUMN-1; ++j)
    {   std::cout << j << "  ";
    }
    std::cout << "Sum\n";
    for(int j = 0; j < 12; ++j)
    {   std::cout << "---";
    }
    std::cout << "\n";
    for(int i = 0; i < ROW; ++i)
    {   std::cout << i << " | ";
        for(int j = 0; j < COLUMN; ++j)
        {   std::cout << tab[i][j] << "  ";
        }
        std::cout << "\n";
    }
 
 
    ///-----------------------------------|
    /// Чистим память.                    |
    ///-----------------------------------:
    for(int i = 0; i < ROW; ++i)
    {   delete[] tab[i];
    }
    delete[] tab;
 
    std::cin.get();
    return 0;
}
2
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
16.10.2019, 11:51 7
Цитата Сообщение от Rudman132 Посмотреть сообщение
Помогите исправить
Цитата Сообщение от Rudman132 Посмотреть сообщение
элементы массива - это числа 0,1 или 3
C++
1
2
3
4
  const std::size_t pv_size = 3;
  const int possible_values[pv_size] { 0, 1, 3 };
  // ... init a, for i, for j
  a[i][j] = possible_values[rand() % pv_size];
Цитата Сообщение от Rudman132 Посмотреть сообщение
Как эту задачу еще можно реализовать?
Много можно навертеть. Просто переписал то что было с другим форматированием.
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
#include <iostream>
#include <iomanip>
 
int main () {
  const size_t str = 10, 
    col = 10, 
    pv_size = 3;
  int a[str][col],
    c[str] = { 0 },
    possible_values[pv_size] = { 0, 1, 3 };
  int* b[str];
  
  for (size_t i = 0; i < str; i++) {
    b[i] = a[i];
    for (size_t j = 0; j < col; j++)
      c[i] += a[i][j] = possible_values[rand() % pv_size];
  }
  
  for (size_t i = 0; i < str - 1; i++)
    for (size_t j = i + 1; j < str; j++)
      if (c[i] < c[j])
        std::swap(c[i], c[j]),
        std::swap(b[i], b[j]);
 
  for (size_t i = 0; i < str; i++) {
    for (size_t j = 0; j < col; j++)
      std::cout << std::setw(4) << b[i][j];
    std::cout << std::endl;
  }
}
Добавлено через 1 час 24 минуты
Rudman132, ещё посмотрите на std::sample для генерации случайной последовательности указанных значений
2
16.10.2019, 11:51
BasicMan
Эксперт
19315 / 2622 / 84
Регистрация: 17.02.2009
Сообщений: 10,364
Блог
16.10.2019, 11:51
Помогаю со студенческими работами здесь

Найти количество нулей каждого столбца матрицы и отсортировать столбцы по убыванию этих характеристик
Дана прямоугольная матрица. Найти количество нулевых элементов каждого столбца матрицы и...

Отсортировать строки по возрастанию суммы цифр чисел в строках
отсортировать строки по возрастанию суммы цифр чисел в строках

Переставить строки матрицы, размещая их по убыванию сумм элементов в строках
double arr = new double; for (int i = 0; i &lt; arr.GetLength(0); i++) { ...

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru