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

Упорядочить массив согласно условию

24.09.2016, 21:53. Просмотров 244. Ответов 3
Метки нет (Все метки)

Добрый день, нужна такая помощь)

Есть таблица:
Kj......
Ai 3 5 1 4
. 2 5 3 1
. 3 3 3 1
. 2 1 1 2

Нужно взять первую строку и проверить сначала со 2й, потом с 3й и т.д... если каждая из цифр первой строки будет больше или равна соответствующей цифре другой строки, то та строка которая меньше удаляется. Т.е. выходит из рассмотрения.
Если же нет, то берем вторую строку и сравниваем ее с 1й, 3й,4й, и т.д.... и проверяем на условие >=, если все цифры больше или равны то меньшая строка удаляется из рассмотрения.
И когда уже дойдет до конца нужно вывести те строки, которые остались. в которых не понятно какая строка больше.
Например, в нашем случае при первом обходе, будет удалена 4ая строка, так как 1ая строка больше..
Помогите, осуществить метод этот)
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.09.2016, 21:53
Ответы с готовыми решениями:

Упорядочить заданный массив согласно условию
Дан массив a. Упорядочить элементы массива а по неубыванию в соответствии со следующим критерием:...

Упорядочить заданный массив согласно условию
Задание: Составить программы благоустройства первых N, N ≤12, элементов массива X. Вид...

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

Используя контейнер std::list, упорядочить заданную последовательность согласно условию
Используя стандартную библиотеку шаблонов STL и класс list по работе с двунаправленным списком,...

Сформировать массив согласно условию
из элементов массива D сформировать массив А того же размера по правилу:если номер чётный, то...

3
Invader0x7F
Helper C/C++
285 / 162 / 122
Регистрация: 22.09.2016
Сообщений: 518
Завершенные тесты: 5
25.09.2016, 07:53 2
Условие задачи я честно говоря не понял:
Нужно взять первую строку и проверить сначала со 2й, потом с 3й и т.д... если каждая из цифр первой строки будет больше или равна соответствующей цифре другой строки, то та строка которая меньше удаляется. Т.е. выходит из рассмотрения.
Если же нет, то берем вторую строку и сравниваем ее с 1й, 3й,4й, и т.д.... и проверяем на условие >=, если все цифры больше или равны то меньшая строка удаляется из рассмотрения.
И когда уже дойдет до конца нужно вывести те строки, которые остались. в которых не понятно какая строка больше.
Вот вроди бы сделал:
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 <ctime>
#include <cstdlib>
#include <iostream>
#include <vector>
 
using namespace std;
 
#define N 10
 
int main(int argc, char* argv[])
{
    std::srand((unsigned)std::time(NULL));
 
//  std::vector<std::vector<int>> matrix = { { 3, 5, 1, 4 },
//                                           { 2, 5, 3, 1 },
//                                           { 3, 3, 3, 1 },
//                                           { 2, 1, 1, 2 } };
 
    std::vector<std::vector<int>> matrix = { { 4, 4, 4, 4 },
                                             { 3, 3, 3, 3 },
                                             { 2, 2, 2, 2 },
                                             { 1, 1, 1, 1 } };
 
    std::vector<std::vector<int>> matrix_temp = matrix;
    
    for (std::size_t row = 0; row < matrix.size(); row++)
    {
        for (std::size_t col = 0; col < matrix.size(); col++)
            std::cout << matrix[row][col] << " ";
 
        std::cout << endl;
    }
 
    std::cout << endl << endl;
 
    for (std::size_t index = 0; index < matrix.size(); index++)
    {
        std::vector<int>::iterator col_it;
        std::vector<int> cols = matrix[index];
        for (col_it = cols.begin(); col_it != cols.end(); col_it++)
            std::cout << *col_it << " ";
 
        std::cout << endl;
        std::cout << "-------------------" << endl;
 
        std::vector<vector<int>>::iterator rm_it = matrix.begin();
        while (rm_it != matrix.end())
        {
            std::vector<int> rm_cols = *rm_it;
            std::vector<int>::iterator rc_it;
            if ((matrix.end() - rm_it) != (matrix.size() - index))
            {
                bool f = false; 
                col_it = cols.begin(); rc_it = rm_cols.begin();
                while (rc_it != rm_cols.end() && !f)
                    f = *col_it++ < *rc_it++ ? 1 : 0;
 
                if (f == false)
                {
                    matrix.erase(rm_it);
                    rm_it = matrix.begin();
                }
            }
 
            rm_it++;
        }
 
        for (auto r_it = matrix.begin(); r_it != matrix.end(); r_it++)
        {
            std::vector<int> cols = *r_it;
            for (auto c_it = cols.begin(); c_it != cols.end(); c_it++)
                std::cout << *c_it << " ";
 
            std::cout << endl;
        }
 
        matrix = matrix_temp;
 
        std::cout << endl;
    }
 
    std::cin.get();
    std::cin.get();
}
Как проверите. Напишите.
0
sourcerer
Модератор
Эксперт CЭксперт С++
4975 / 2158 / 329
Регистрация: 20.02.2013
Сообщений: 5,595
Записей в блоге: 24
Завершенные тесты: 1
25.09.2016, 12:11 3
Цитата Сообщение от gudovanets Посмотреть сообщение
Нужно взять первую строку и проверить сначала со 2й, потом с 3й и т.д... если каждая из цифр первой строки будет больше или равна соответствующей цифре другой строки, то та строка которая меньше удаляется. Т.е. выходит из рассмотрения.
Если же нет, то берем вторую строку и сравниваем ее с 1й, 3й,4й, и т.д.... и проверяем на условие >=, если все цифры больше или равны то меньшая строка удаляется из рассмотрения.
И когда уже дойдет до конца нужно вывести те строки, которые остались. в которых не понятно какая строка больше.
Например, в нашем случае при первом обходе, будет удалена 4ая строка, так как 1ая строка больше..
gudovanets, это в учебнике так условие задачи записано?
0
gudovanets
1 / 1 / 1
Регистрация: 12.02.2015
Сообщений: 51
27.09.2016, 11:42  [ТС] 4
gru74ik, Invader0x7F, нет не так... не получается.


Вообще задание звучит так: найти множетсво Эджварта Парето. там таблица дана, нужно сделать ее оценку в следствии чего получается 10 строк и в каждой строке 5 цифр. И нужно сравнить все строки между собой исключив те, что меньше.Т.е. сравниваем первую и вторую ПОЭЛЕМЕНТНО если каждый елемент 1ой строки больше или равен елементу 2ой строки, то 1 строка больше и 2 строка удаляется из рассмотрения и из множества. далее сверяется 1 строка и 3я, потом 1 и 4 и т.д.... после 2 и 1, 2 и 3, 2 и 4 ... и т.д... те строки, что меньше удаляются. А те где условие не точно и нельзя сказать, какая больше (НАПРИМЕР 1 строка- 1 2 3 4, а вторая 2 1 3 4 )) те остаются и вывод должен быть такой:
остались 1 строка, там 3, 5 и т.д....
0
27.09.2016, 11:42
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.09.2016, 11:42

Заполнить вещественный массив согласно условию
Помогите решить! Создать вещественный массив А из N элементов для хранения значений элементов...

Вывести массив на консоль согласно условию
1 Написать программу , которая должна находить максимальный элемент в двухмерном массиве...

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


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

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

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