Форум программистов, компьютерный форум CyberForum.ru

Кому не трудно, нужна идея как сделать проще - C++

Восстановить пароль Регистрация
 
Zazy
 Аватар для Zazy
37 / 37 / 11
Регистрация: 14.04.2013
Сообщений: 167
11.12.2013, 01:35     Кому не трудно, нужна идея как сделать проще #1
Всем добра! собственно вот задание
Дана целочисленная матрица A(M,N). Продублировать в матрице каждый столбец,
являющийся перестановкой натуральных чисел от 1 до М.
т.е. что нужно сделать допустим исходный массив
1, 2, 3, 4, 5
2, 1, 8, 9, 0
если столбе равен перестановкой натуральных чисел от 1 до М, дописать этот столбец в конце
результат
1, 2, 3, 4, 5, 1, 2
2, 1, 8, 9, 0, 2, 1
мой алгоритм мне кажется муторным, может кто каких идей подбросит:
А[2][5] =
{{1, 2, 3, 4, 5},
{2, 1, 8, 9, 0}};
Создать два массива размерностью T1[M], T2[M], первый заполнить от 1 до М T1[M] = {1, 2}, во второй массив помещать столбцы массива А1 делать сортировку и сравнивать с T1, если массивы равны счетчик увеличить на 1 (это для создания динамического массива куда будет занесен результат), создаю двумерный динамический массив, еще раз запускаю цикл на сравнения, те что проходят по условию записываю в конец массива (i =1, N + i, это момент еще не до конца продуман) а потом просто заполняю динамический массив элементами A[M][N]
фух надеюсь понятно изложил.
ЗЫ. только идеи, прошу код не писать
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.12.2013, 01:35     Кому не трудно, нужна идея как сделать проще
Посмотрите здесь:

Кому не трудно допишите пожалуйста комментарии! C++
C++ задачи c++ кому не трудно решите
задачи c++ кому не трудно решите C++
C++ оператор switch, можно ли сделать код проще?
C++ Составьте блок схему пожалуйста кому не трудно
C++ Как сделать проще?
Как можно сделать данный кусок кода меньше и проще? C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Гром
 Аватар для Гром
199 / 118 / 10
Регистрация: 20.03.2009
Сообщений: 1,075
Записей в блоге: 15
11.12.2013, 07:53     Кому не трудно, нужна идея как сделать проще #2
Кодом, пожалуй, нагляднее будет
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const unsigned M = 10;
bool Is1toM(unsigned* arr)
{
bool Found[M] = { false };
for (unsigned i = 0; i < M; ++i)
 {
 unsigned val = arr[i] - 1;
 if (val < 0 || val >= M)   //Вообще-то unsigned не может быть меньше нуля, это для иллюстрации и на случай замены на signed
  return false;
 if (Found[val])
  return false;
 Found[val] = true;
 }
return true;
}
То есть для всех чисел от 1 до М у нас есть флаги в массиве, что данное число уже обнаружено при просмотре входного массива. Если элемент входного массива не есть число от 1 до М - фейл, если обнаруживаем второе вхождение - аналогично.
Yandex
Объявления
11.12.2013, 07:53     Кому не трудно, нужна идея как сделать проще
Ответ Создать тему
Опции темы

Текущее время: 14:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru