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

Перебор массива и поиск повторяющихся чисел - C++

Восстановить пароль Регистрация
 
cflood
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 37
24.06.2013, 21:42     Перебор массива и поиск повторяющихся чисел #1
День добрый, подскажите пожалуйста, задача следующая, имеем массив {1,2,3,9,4,5,6,9,7,8,0}, тут девятка встречается два раза, необходимо обнулить элементы массива которые повторяются в нём, то бишь обнулить девятки.

Я как понимаю нужно перебрать таким образом:

C++
1
2
3
4
5
    for (int i = 0; i < size; i++) {
        for (int y = 0; y < size; y++) {
 
        }
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2013, 21:42     Перебор массива и поиск повторяющихся чисел
Посмотрите здесь:

C++ Вывод повторяющихся чисел массива и кол-во повторений
поиск не повторяющихся элементов C++
Полный перебор чисел массива C++
Поиск повторяющихся значений массива C++
C++ Перебор/поиск с возвратом в графе
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tsin
 Аватар для Tsin
419 / 395 / 108
Регистрация: 30.12.2012
Сообщений: 1,085
Записей в блоге: 2
Завершенные тесты: 3
24.06.2013, 21:50     Перебор массива и поиск повторяющихся чисел #2
@cflood, можно вот так, наверное. Писал прямо здесь, так что могут быть ошибки)
C++
1
2
3
4
5
6
7
8
9
10
11
for(int i = 0; i < size-1; i++)
{
    if(mas[i] != 0)
    {
        for(int j = i+1; j < size; j++)
        {
            if(mas[i] == mas[j])
                mas[j] = 0;
        }
    }
}
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
24.06.2013, 22:02     Перебор массива и поиск повторяющихся чисел #3
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
#include<iostream>
#include<stdlib.h>
#include<time.h>
 
using namespace std;
 
int main()
{
    srand(time(NULL));
    const int size = 20; // размер массива
 
    int ar[size];
 
    for (int i = 0; i < size; i++)
    {
        ar[i] = rand() % 10; // заполняем массив случайными числами
        cout << ar[i] << "  "; // печать элементов массива
    }
    cout << "\n";
for (int i = 0; i < size; i++)
    {
        for (int j = i + 1; j < size ; j++)
        {
            if ( ar[i] == ar[j] ) // если найден одинаковый элемент
            {
               ar[i]=0;
            }
        }
    }
    for (int i = 0; i < size; i++)
    {
        cout << ar[i] << "  "; // печать элементов массива
    }
    cout << endl;
 return 0;
}
cflood
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 37
24.06.2013, 22:22  [ТС]     Перебор массива и поиск повторяющихся чисел #4
Спасибо ребята, поразбираюсь.
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 180
24.06.2013, 22:23     Перебор массива и поиск повторяющихся чисел #5
Цитата Сообщение от Genn55 Посмотреть сообщение
for (int i = 0; i < size; i++)
* * {
* * * * for (int j = i + 1; j < size ; j++)
* * * * {
* * * * * * if ( ar[i] == ar[j] ) // если найден одинаковый элемент
* * * * * * {
* * * * * * * *ar[i]=0;
* * * * * * }
* * * * }
* * }
если так, то получится тогда: {1,2,3,9,4,5,6,9,7,8,0}-было, {1,2,3,0,4,5,6,9,7,8,0}-стало, т.е., обнулится только самая первая девятка
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
24.06.2013, 22:32     Перебор массива и поиск повторяющихся чисел #6
А как должно быть?Если первая девятка обнулилась то вторая уже не дубликат.Если девяток будет больше останется одна.Также и любое другое число,включая и 0,если встретится более одного раза обнулится и останется одно.
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 180
24.06.2013, 22:35     Перебор массива и поиск повторяющихся чисел #7
Цитата Сообщение от cflood Посмотреть сообщение
необходимо обнулить элементы массива которые повторяются в нём, то бишь обнулить девятки
@Genn55, если девятки, то ,я думаю, все надо обнулять
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
24.06.2013, 22:50     Перебор массива и поиск повторяющихся чисел #8
@Genn55, какой-то странный результат...
2 4 0 7 7 0 9 0 4 9 4 4 1 2 4 5 8 3 5 8
0 0 0 0 7 0 0 0 0 9 0 0 1 2 4 0 0 3 5 8
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
#include <iostream>
 
using namespace std;
 
int main()
{
    const int arr_size = 11;
    int arr[arr_size] = {0, 3, 1, 1, 1, 9, 9, 1, 1, 8};
    const int replacer = 0;
 
    for (int i = 0; i != arr_size; ++i)
        cout << arr[i] << ", ";
    cout << endl;
 
    for (int i = 0; i != arr_size; ++i) {
        if (arr[i] == replacer) continue;
        int not_unique = 0;
        for (int j = i + 1; j != arr_size; ++j)
            if (arr[j] == arr[i]) {
                arr[j] = replacer;
                ++not_unique;
            }
        if (not_unique) arr[i] = replacer;
    }
 
    for (int i = 0; i != arr_size; ++i)
        cout << arr[i] << ", ";
    return 0;
}
0, 3, 1, 1, 1, 9, 9, 1, 1, 8, 0,
0, 3, 0, 0, 0, 0, 0, 0, 0, 8, 0,
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
24.06.2013, 22:53     Перебор массива и поиск повторяющихся чисел #9
Ну если так, то переписать строку с
C++
1
ar[i]=0;
на
C++
1
ar[j]=0;
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
24.06.2013, 22:57     Перебор массива и поиск повторяющихся чисел #10
@Genn55, переписал. Теперь вывод такой:
C++
1
2
8  0  5  8  6  2  5  6  5  7  0  3  2  4  2  4  4  0  9  9
8  0  5  0  6  2  0  0  0  7  0  3  0  4  0  0  0  0  9  0
То есть зануливает повторяющиеся после i + 1, но не i....
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 180
24.06.2013, 22:58     Перебор массива и поиск повторяющихся чисел #11
@Genn55, может ещё проверку вида if (ar[i]!=0) поставить перед внутренним циклом , ведь смысла нуль обнулять нет
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
24.06.2013, 23:17     Перебор массива и поиск повторяющихся чисел #12
Olivеr Я изначально так понял,что нужно обнулить дубликаты.Т.е чтобы осталось по одному не повторяющемуся числу.А если полностью обнулять дубликаты,вы соверщенно правы без дополнительной переменной не обойтись.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.06.2013, 09:25     Перебор массива и поиск повторяющихся чисел
Еще ссылки по теме:

C++ Поиск повторяющихся слов
Перебор сумм чисел массива C++
Подсчет повторяющихся чисел одномерного массива C++

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

Или воспользуйтесь поиском по форуму:
cflood
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 37
25.06.2013, 09:25  [ТС]     Перебор массива и поиск повторяющихся чисел #13
Ну что вроде как решил получилось вот что:
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
int main ()
{
 
    int massive[] = {1,2,3,9,4,5,6,9,7,8,0};
    int new_massive[] = {1,2,3,9,4,5,6,9,7,8,0};
    int size = sizeof(massive)/sizeof(massive[0]);
    int counter = 0;
 
    for(int i = 0; i < size; i++)
    {
            for(int j = 0; j < size; j++)
            {
                if(massive[i] == massive[j])
                {
                    counter++;
                }
            }
 
            if (counter > 1 && massive[i] & 1) //нужно было сделать только для повторяющихся нечётных чисел 
            {
                new_massive[i] = NULL;
            }
 
            counter = 0;
 
            cout << new_massive[i] << "\n";
    }
    
    int wait;
    cin >> wait;
 
}
В итоге повторения нечётных чисел заменяются на NULL то бишь на 0.

Добавлено через 8 минут
Наверное задачу можно решить элегантнее, но по крайней мере работает

Добавлено через 2 минуты
Кстати, вопрос в догонку, как создать копию массива massive? Чтобы не приходилось в new_massive вбивать данные.

Методы которыми обычно пользовался в php/javascript выдают ошибку.
Yandex
Объявления
25.06.2013, 09:25     Перебор массива и поиск повторяющихся чисел
Ответ Создать тему
Опции темы

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