Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 22.01.2019
Сообщений: 57

сумма строк и сортировка в матрице, но все не так просто

09.04.2019, 21:06. Показов 1061. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть матрица nxm, суть в том, что надо отсортировать строки матрицы по убыванию суммы строк. пример:
2 4 4
5 4 2
6 6 4
и из этого делаем
6 6 4
5 4 2
2 4 4
Я сделал массив(arr), в котором храню суммы элементов по строкам. Проблема в самой сортировке, вот фрагменты кода
C++
1
2
3
4
5
6
7
8
9
void sort(int **p, int n, int m, int *arr )
{
    for (int i=0;i<n;i++)
        for (int j=0;j<m;j++)
        {
            arr[i]+=p[i][j];
        }
 
}
C++
1
2
3
4
5
6
7
8
9
10
11
for(int k=0;k<n;k++){
         for(i=0;i<n;i++) {
              if (arr[i]<arr[i+1]){ 
                  for (j=0;j<m;j++){
                      temp=p[i][j];
                      p[i][j]=p[i+1][j];
                      p[i+1][j]=temp;
                  }
              }
            }
     }
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.04.2019, 21:06
Ответы с готовыми решениями:

Сумма строк в матрице и сортировка
Дана матрица в ней нужно посчитать сумму каждой строки, и переставить строки по возрастанию, Заметка: Найти сумму строки, и оперировать...

Если с CMS все так просто, то почему сайты все еще делают в блокнотах?
Я вот примерно месяц уже занимаюсь изучением html, css и php, и узнал что еще можно создавать сайты с помощью wordpress и joomla, так вот,...

НЕ всё так просто
Привет всем, не могли бы Вы мне помочь решить одну задачку, с ней не всё так просто, как кажется на первый взгляд, я с ней морочу голову...

10
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
09.04.2019, 21:17
artemor3228, обнули arr[i] перед суммированием
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
09.04.2019, 21:21
artemor3228,
внимание, псевдокод:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <algorithm>
#include <numeric>
 
int rows, cols;
 
int main()
{
    int** matrix;
//...
    std::sort(matrix, matrix + rows, [](int* a, int* b) {
        return
            std::accumulate(a, a + cols, 0) <
            std::accumulate(b, b + cols, 0);
    });
}
0
0 / 0 / 0
Регистрация: 22.01.2019
Сообщений: 57
09.04.2019, 21:56  [ТС]
Цитата Сообщение от Байт Посмотреть сообщение
обнули arr[i] перед суммированием
если вы про функцию sort, то изначально все элементы равны нулю.

Добавлено через 1 минуту
Цитата Сообщение от zayats80888 Посмотреть сообщение
внимание, псевдокод:
спасибо за ответ, но мне надо именно каким нибудь классическим методом их сортировать, пузырьком допустим, как у меня
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
09.04.2019, 21:57
Цитата Сообщение от artemor3228 Посмотреть сообщение
изначально все элементы равны нулю.
Из твоего кода это никак не следует.
0
0 / 0 / 0
Регистрация: 22.01.2019
Сообщений: 57
09.04.2019, 22:09  [ТС]
Цитата Сообщение от Байт Посмотреть сообщение
Из твоего кода это никак не следует.
ДА, но тут сама проблема в сортировке строк, ошибку с массивом я бы понял, а тут получается так, что сортирует, но не до конца
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
09.04.2019, 22:15
artemor3228, ну так вам надо просто строки переставить, или сами элементы строк то же сортировать надо?
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
09.04.2019, 22:20
Цитата Сообщение от artemor3228 Посмотреть сообщение
сортирует, но не до конца
Ну да. Ты же сравниваешь только соседние
Первые 3 строчки надо как-то так
C++
1
2
3
for(int k=0;k<n;k++){
         for(i=k+1;i<n;i++) {
              if (arr[i]<arr[k]){
Ну и, соответственно, перестановку элементов подправить
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
09.04.2019, 22:21
artemor3228,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <algorithm>
 
void sort(int **p, int n, int m, int *arr)
{
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
        {
            arr[i] += p[i][j];
        }
    for (int i = 0; i < n - 1; ++i)
        for (int j = i + 1; j < n; ++j)
            if (arr[i] < arr[j]) std::swap(p[i], p[j]);
}
 
int main()
{
    //...
}
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2222 / 1424 / 419
Регистрация: 16.05.2013
Сообщений: 3,640
Записей в блоге: 6
09.04.2019, 22:32
zayats80888, крайне не эффективно.

Думаю стоит завести временны массив указателей на строки и сумм по строкам и в дальнейшем сортировать только указателям. В конце достаточно построить выходной массив.
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
std::pair<int*, int> array[n];
 
for(int i = 0; i < n; ++i) {}
    int acc = 0;
    for (int j = 0; j < m; ++j) {
        acc += p[i][j];
    }
    
    array[i] = std::make_pair(p[i], acc);
}
 
for(int k = 0; k < n - 1; ++k){
    for(int i = k + 1; i < n; ++i) {
        if (array[i].second < arr[i+1].second) { 
            std::swap(array[i].first, array[i + 1].first);
        }
    }
}
 
int result[n][m];
for(int i = 0; i < n; ++i){
    int pRow = array[i].first;
    for(int j = 0; j < m; ++j) {
        result[i][j] = pRow[j];
    }
}
p.s. За работу кода не ручаюсь - не тестил. Привел только для иллюстрации идеи.
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
09.04.2019, 22:51
Лучший ответ Сообщение было отмечено artemor3228 как решение

Решение

artemor3228,
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
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
 
int main()
{
    srand((int)time(0));
    int n, m;
    cout <<"n="; cin >>n;
    cout <<"m="; cin >>m;
    
      int **a = new int*[n];
      for (int i = 0; i < n; i++)
          a[i]=new int[m];
  
      int*c = new int[n];    
    
    for (int i = 0; i < n; i++)
    {
        c[i]=0;    
        for (int j = 0; j < m; j++)
        {
        a[i][j]=rand()%9 + 1; 
        c[i]+=a[i][j];
        cout << a[i][j] << " ";    
        }
        cout << "  sum=" << c[i];        
        cout << "\n";
    }
    cout << "\n";     
 
    for (int i = 1; i < n; i++)    
        for (int k = 0; k < n-i; k++)        
            if (c[k]>c[k+1])
            {
                swap(c[k],c[k+1]);   
                swap(a[k],a[k+1]);
            }             
    
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j < m; j++)        
        cout << a[i][j] << " ";       
        cout << "  sum=" << c[i];
        cout << "\n";
    }    
    
    for (int i = 0; i < n; i++)
    delete [] a[i];
    delete [] a;
    delete[]c;
system("pause");
return 0;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.04.2019, 22:51
Помогаю со студенческими работами здесь

Оказывается не все так просто.. ((
Изначально задание выглядит так. Нарисовать координатную ось с графами и вывести на экран график функции. Пример такой y=x(в...

Зависает на логотипе (не все так просто)
Здравствуйте! Юзаю простой бук ASUS F542UF-DM424T, купленный не давно (на гарантии). Пользовался им в основном от сети, при этом выставил...

Подстрока в строке - не так всё просто
Доброго времени суток. Прошу помощи в такой задаче. Есть такая таблица table_products: ID Brand Opis 1 Snikers ...

Выключается компютер но не все так просто
Проблема с компютером, выключается но не все так просто.. Здраствуйте! У меня такая проблема, все началось с того что у меня пол года...

Как скрыть IP. Но все не так просто!
Всем привет! Не знаю в какую ветку писать, попробую спросить тут.. Стоит ряд задач, для начала опишу кратко ситуацию. Есть несколько...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru