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

В матрице отсортировать строки по возрастанию минимального элемента строки

09.12.2011, 03:49. Просмотров 688. Ответов 2
Метки нет (Все метки)

В матрице M x N переставить строки таким образом, чтобы получилась последовательность q1>=q2>=…>=qm, где qi – минимальное значение среди всех элементов i – ой строки.
Программа должна выполнять ввод и вывод матрицы и дополнительных данных, выполнять необходимые действия и выводить результаты.

Добавлено через 2 часа 46 минут
Разработка и отладка алгоритмов и программ с использованием указателей
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2011, 03:49
Ответы с готовыми решениями:

Отсортировать строки в двумерном массиве по возрастанию минимального элемента
Отсортировать строки в двумерном массиве по возрастанию минимального элемента. Как-то не особо...

Отсортировать массив по возрастанию после минимального элемента
Моё задание отсортировать массив по возрастанию после минимального элемента. То есть сначала нужно...

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

Найти среднее арифметическое каждой строки матрицы и отсортировать строки по возрастанию
Дана квадратная матрица. Найти среднее арифметическое каждой строки и отсортировать строки по...

Отсортировать элементы массива по возрастанию если номер минимального элемента меньше заданного
Не смог справится с данными заданиями, может кто объяснит и приведет пример, буду очень благодарен...

2
CEBEP
107 / 107 / 23
Регистрация: 21.03.2010
Сообщений: 445
09.12.2011, 06:25 2
Лучший ответ Сообщение было отмечено JOKER DIMA как решение

Решение

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
#include <iostream>
#include <vector>
#include <ctime>
#include <algorithm>
#include <functional>
 
typedef std::vector<double> Row;
typedef std::vector<Row> Matrix;
 
struct min
{
    bool operator () (const Row& op1, const Row& op2) const
    {
        return *std::min_element( op1.begin(), op1.end() ) > *std::min_element( op2.begin(), op2.end() );
    }
};
 
std::ostream& operator << (std::ostream& out, const Row& r)
{
    for (Row::const_iterator it =  r.begin(), end = r.end(); it != end; ++it)
    {
        out << *it << ' ';
    }
    return out;
}
std::ostream& operator << (std::ostream& out, const Matrix& m)
{
    for (Matrix::const_iterator it = m.begin(), end = m.end(); it != end; ++it)
    {
        out << *it << std::endl;
    }
    return out;
}
 
void generate ( Matrix& m, Matrix::size_type M, Matrix::size_type N )
{
    srand( static_cast<unsigned> ( time(0) ) );
    m.resize( N );
    for (Matrix::iterator it = m.begin(), end = m.end(); it  != end; ++it)
    {
        it->reserve( N );
        for (Matrix::size_type i = N; i; --i)
        {
            it->push_back( static_cast<double> ( rand() ) / 32767 * 10 * ( rand() % 2 ? -1 : 1 ) );
        }
    }
}
 
void main ()
{
    Matrix m;
 
    generate(m, 5, 5);
 
    std::cout << m << "=============================" << std::endl;
 
    std::sort(m.begin(), m.end(), min() );
 
    std::cout << m;
}
Добавлено через 1 час 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
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
#include <stdio.h>
 
#define M 5
#define N 5
 
void printMatrix(double m[M][N], unsigned width, unsigned height)
{
    for (int i = 0; i != height; ++i)
    {
        for (int j = 0; j != width; ++j)
        {
            printf("%lf ", m[i][j]);
        }
        printf("\n");
    }
}
 
double min(double r[N], unsigned size)
{
    double minimum = *r;
    for (unsigned i = 1; i != size; ++i)
        minimum = r[i] < minimum ? r[i] : minimum;
    return minimum;
}
 
void swapRows(double r1[N], double r2[], unsigned w)
{
    double cnt;
    for ( int i = 0; i != w; ++i)
    {
        cnt = r1[i];
        r1[i] = r2[i];
        r2[i] = cnt;
    }
}
 
unsigned maxRow(double m[M][N], unsigned height, unsigned width)
{
    unsigned max = 0;
    for (int i = 1; i != height; ++i)
    {
        max = min( m[i], width ) > min( m[max], width ) ? i : max;
    }
    return max;
}
 
void sort(double m[M][N], unsigned height, unsigned width)
{
    int i = 0;
    while ( height - i > 1 )//Пока в неотсортированной части осталось больше одного элемента
    {
        unsigned max = maxRow(m + i, height - i, width) + i;//Получаем указатель на максимальный элемент
        printf("stroka s naibolshim minimalnim elementom: %d (minimum: %lf)\n", max + 1, min(m[max], width));
        if( i != max )
        {
            swapRows(m[i], m[max], width);//Меняем его с первым
            printf("stroki %d i %d pomeneni mestami.\n", i + 1, max + 1);
        }
 
        ++i;//Двигаемся дальше
    }
}
void generate(double matrix[M][N], unsigned height, unsigned width)
{
    for (int i = 0; i != height; ++i)
    {
        for ( int j = 0; j != width; ++j)
        {
            printf("Vvedite element [%d][%d]: ", i + 1, j + 1);
            scanf("%lf", matrix[i] + j);
        }
    }
}
 
void main ()
{
    double matrix[M][N];
 
    generate(matrix, M, N);
    printf("sgenerirovana matrica\n");
    printMatrix(matrix, M, N);
    sort(matrix, M, N);
    printf("rezultat preobrazovani:\n");
    printMatrix(matrix, M, N);
}
Добавлено через 57 секунд
но второй вариант, конечно, для наркоманов...
1
zarko97
279 / 39 / 13
Регистрация: 11.10.2015
Сообщений: 405
17.04.2017, 01:09 3
C++
1
2
3
4
5
std::multiset<std::vector<int>, std::function<bool(std::vector const&, std::vector const&)>> Matrix( Matr.begin, Matr.end, []
                                            ( std::vector const& lhsVec, std::vector const& rhsVec ) 
                                            {
                                                 return  *std::min_element( lhsVec.begin(), lhsVec.end() ) > *std::min_element( rhsVec.begin(), rhsVec.end() );  
                                            } );
0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.04.2017, 01:09

Отсортировать элементы в массиве по возрастанию, а также найти сумму минимального и максимального элемента
4. Заполнить одномерный массив из 10 элементов случайными элементами от 0 до 100. Отсортировать...

От значений элементов каждой строки двумерного массива вычесть значение минимального элемента этой строки
От значений элементов каждой строки двумерного массива вычесть значение минимального элемента этой...

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


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

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

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