![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
botasa |
|
||||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 20.11.2011 Репутация: нет Всего: нет |
Есть задача : Расположить строки заданной матрицы по возрастанию количества одинаковых элементов в каждой строке. Я ЗНАЮ ЧТО ТУТ ФОРУМ ПО С++, но от C# тут только скобки массива отличаются, а логика таже, и по С++ больше народа читает просто )
матрица 5х5 Есть матрица 1, 1, 5, 3, 8 4, 1, 6, 4, 4 0, 5, 1, 7, 9 8, 1, 3, 1, 1 9, 9, 1, 2, 9 в матрице надо подсчитать количество одинаковых элементов в каждой строке в данной матрице будет : 2 3 0 3 3 и эту матрице надо так переделать, что б элементы в ней были в таком положении 0 2 3 3 3 то есть вот такого плана: 0, 5, 1, 7, 9 1, 1, 5, 3, 8 4, 1, 6, 4, 4 8, 1, 3, 1, 1 9, 9, 1, 2, 9 Из этого всего я понял, что надо просто отсортировать строки матрицы, но как отсортировать их пользуясь вспомагательным массивом, где записаны их количество повторов цифр непонятно ! Код на C#, и надо на C#, там разница не большая. вот что делал я :
Это был подсчет один. элементов в матрице, записал их в массив. И сама сортировка вот так делал
ЧТО тут не правильного, муозги уже закипели |
||||
|
|||||
DarkProg |
|
|||
![]() Законченный романтик ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1784 Регистрация: 11.3.2009 Где: Земля Репутация: нет Всего: 19 |
Вообще-то очень просто. Тут реально два вариата: 1) Два массива, в одном исходная матрица, в другом в каждом элементе хранится количество одинаковых символов. Каждый раз когда необходимо обменять два значения местами во втором массиве при сортировке, в первом бёрём и меняем строки(как в линейном массиве, только потребуется третий массив для промежуточного хранения значений) 2) Один массив, просто добавляете ещё один столбец, в котором храните количество одинаковых элементов. Далее сортируете по этому дополнительному столбцу. Если я правильно понял суть вашего кода, то вы просто не поняли что надо сделать, и основная ошибка, в том что для того чтобы поменять две строки местами потребуется третий массив, в котором будет временно хранится вся строка. -------------------- "И твоя голова всегда в ответе за то куда сядет твой зад..." "Я студент - скажите с какого я ВУЗа..." ![]() ![]() ![]() |
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Увы, подсчёт неверен, так сравниваются два рядом находящихся элемента матрицы: Совпадающие элементы не обязаны располагаться в матрице рядом... -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
NoviceF |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 13.3.2012 Где: Ростов-на-Дону Репутация: 2 Всего: 2 |
И кроме того, а если в строке одинаковые элементы не одного вида, например 22333? По-моему условие "по возрастанию количества одинаковых элементов" не конкретизирует этот момент, либо как раз конкретизирует, но автор этого не учитывает. Вообще по решению, по-моему нужно задавать список лексем из цифр, сравнивать каждую строку со списком лексем, количество совпадений записывать и уже дальше на этом основании сортировать строки матрицы. Это сообщение отредактировал(а) NoviceF - 30.9.2012, 14:24 |
|||
|
||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Нужно каждую строку отсортировать, а это существенно по разному в C++ и С# - если не писать сортировку вручную.
После этого легко находится число одинаковых элементов в строке. Затем строки сортируются - для этого так же лучше использовать стандартные функции. |
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
![]()
Дальше нужно будет сортировать строки. -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
Silent |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 3.10.2006 Репутация: 1 Всего: 9 |
У вас, botasa, неправильно два с половиной момента:
1) подсчет одинаковых элементов реализован неправильно - считаются только одинаковые стоящие рядом, а надо вообще по строке одинаковые. Реализовывается это в с++ через std::map, в C# вроде как Dictionary; 2) при сортировке вы меняете только диагональные элементы [i,i] и [j,j], а надо менять местами строчки i и j (то бишь все matrix[i,k] и matrix[j,k], k in [0..n-1]). 2+) и еще - количество одинаковых элементов не {2, 3, 0, 3, 3}, а {2, 3, 1, 3, 3} =) А в целом мыслишь правильно. Держи код (C#):
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |