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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.63
Nyuta
0 / 0 / 0
Регистрация: 26.11.2008
Сообщений: 33
#1

алгоритм: заменить повторяющиеся элементы - C++

01.11.2009, 20:28. Просмотров 1076. Ответов 6
Метки нет (Все метки)

помогите, пожалуйста, с алгоритмом задачи: заменить повторяющиеся элементы квадратной матрицы NхN (в ней нет 0 и 1) на 1, а неповторяющиеся элементы на 0.

если несложно, напишите, плиз, алгоритм по пунктам.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
o-user
245 / 202 / 7
Регистрация: 03.02.2009
Сообщений: 788
01.11.2009, 20:44     алгоритм: заменить повторяющиеся элементы #2
Берете очередной элемент матрицы - сравниваете с остальными (с учетом того, что этот элемент не 0 и не 1) и по результатам сравнения заменяете нулем или единицей!
ProNoooob
72 / 72 / 6
Регистрация: 14.10.2009
Сообщений: 121
01.11.2009, 20:51     алгоритм: заменить повторяющиеся элементы #3
Задать массив, размер которого равен размеру самого большого элемента матрицы или больше.
заполнить массив нулями.

Пройтись по всем элементам матрицы и для каждого элемента вызывать massiv[i]++;

получаем: если массив[значение элемента в матрице] == 1, то элем. не повторяется. Если больше, то повторяется.

Повторно проходим по массиву и записываем 0ли и ядинички.

Это самый простой способ.Первое что пришло в голову.
Nyuta
0 / 0 / 0
Регистрация: 26.11.2008
Сообщений: 33
01.11.2009, 21:12  [ТС]     алгоритм: заменить повторяющиеся элементы #4
Цитата Сообщение от o-user Посмотреть сообщение
Берете очередной элемент матрицы - сравниваете с остальными (с учетом того, что этот элемент не 0 и не 1) и по результатам сравнения заменяете нулем или единицей!
это понятно. вопрос в другом: нам же надо заменить не только первый повторный элемент, но и все остальные. те, если у нас 5 встречается три раза, нам надо заменить не только первые две пятерки на 1, но и последнюю, как это сделать?

Добавлено через 7 минут
Цитата Сообщение от ProNoooob Посмотреть сообщение
для каждого элемента вызывать massiv[i]++
зачем? (те, что при этом произойдет)
Nyuta
0 / 0 / 0
Регистрация: 26.11.2008
Сообщений: 33
02.11.2009, 00:58  [ТС]     алгоритм: заменить повторяющиеся элементы #5
Цитата Сообщение от ProNoooob Посмотреть сообщение
массив, размер которого равен размеру самого большого элемента матрицы или больше
почему именно такого размера?
kazak
3032 / 2353 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
02.11.2009, 02:54     алгоритм: заменить повторяющиеся элементы #6
Создаем еще один массив В той же размерности.
Инициализируем его нулями.
Берем первый элемент массива А, сравниваем соответствующий ему элемент в массиве В с нулем. Если равно нулю, сраниваем элемент массива А с остальными. В случае совподений записываем в соответствующие позиции массива В еденицы.
Повторяем для всех элементов А.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2009, 06:07     алгоритм: заменить повторяющиеся элементы
Еще ссылки по теме:

C++ Нужно заменить повторяющиеся пробелы в тексте. Работает только для 1 строки
C++ Найти повторяющиеся в массиве элементы
Заменить повторяющиеся в матрице элементы нулями C++
C++ Почему повторяющиеся символы заданной строки не выводятся на консоль? (алгоритм std::adjacent_find)

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

Или воспользуйтесь поиском по форуму:
valeriikozlov
Эксперт C++
4663 / 2489 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
02.11.2009, 06:07     алгоритм: заменить повторяющиеся элементы #7
без доп. массивов:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
bool fl;
for(int i1=0; i1<n; i1++)
    for(int j1=0; j1<n; j1++)
    {
        fl=false;
        for(int i2=i1; i2<n; i2++)
            for(int j2=0; j2<n; j2++)
            if(mas[i1][j1]==mas[i2][j2] && mas[i1][j1]!=0 && mas[i1][j1]!=1)
            {
                fl=true;
                mas[i2][j2]=1;
            }
        if(j2==n && i2==n && mas[i1][j1]!=1 && mas[i1][j1]!=1)
        {
            if(fl)
                mas[i1][j1]=1;
            if(!fl)
                mas[i1][j1]=0;
        }
    }
заводим переменную bool fl. В начале каждого прохода присваиваем ей false. Берем очередной элемент и сравниваем его со всеми оставшимися. Если они равны между собой и не равны 0 или 1. То очередной наш элемент пока не трогаем, а сравниваемому с ним присваиваем 1 (и fl=true). По окончании цикла анализируем fl, и на основании (менялся или не менялся fl) только теперь присваиваем нашему очередному элементу значение.
Yandex
Объявления
02.11.2009, 06:07     алгоритм: заменить повторяющиеся элементы
Ответ Создать тему
Опции темы

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