Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2017, 09:25   #1
Rainbow_
Пользователь
 
Регистрация: 18.03.2017
Сообщений: 35
Печаль Найти повторяющиеся значения массива

Я написала код, чтобы найти значения в массиве, которые повторяются 2 и более раз, но он выводит повторяющиеся значения столько раз, сколько они встречаются. Подскажите, пожалуйста, как доработать.
Код:
#include <iostream>
using namespace std;
void main()
{
    const int size=10;
    int ar[size];
    for (int i=0;i<size; i++)
    {
    cout<<"Enter element\n";
    cin>>ar[i];
    }
    cout<<"\n\n";

    for(int i=0;i<size;i++)
    {
        for (int j=i+1;j<size; j++)
        {
            if(ar[i]==ar[j])
            cout<<ar[i]<<" ";
        }
    }
}
Rainbow_ вне форума Ответить с цитированием
Старый 31.05.2017, 10:01   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Включить чуть логики и сделат как она подсказывает - хранить уже просмотренные/исключать их/ставить метки, что просмотрели.
p51x вне форума Ответить с цитированием
Старый 31.05.2017, 10:16   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
ключить чуть логики и сделат как она подсказывает - хранить уже просмотренные/исключать их/ставить метки, что просмотрели.
верно.
и ещё вариант - просматривать, был ли найденный символ ранее, если был - не выводить найденный.

например:
Код:
    for(int i=0;i<size;i++)
    {
        for (int j=i+1;j<size; j++)
        {
            if(ar[i]==ar[j]) 
            {
              int wasBefore=0;
              for(int k=0;k<i;k++){
              	if(ar[k]==ar[i]) {
              		wasBefore=1; break;
              	}
              }
              if(wasBefore==0){
                 cout<<ar[i]<<" ";
              }
              break;
            }
        }
    }
Serge_Bliznykov вне форума Ответить с цитированием
Старый 31.05.2017, 17:55   #4
Мановар
Пользователь
 
Регистрация: 13.11.2016
Сообщений: 84
По умолчанию

Код:
#include "stdafx.h"
#include <iostream>
#include <algorithm>
int main()
{
	int arr[] = { 1,2,3,3,2,4,3,4,6,2,5,6,7,5 };
	std::sort(std::begin(arr), std::end(arr));
	for (auto it = std::begin(arr) + 1; it != std::end(arr) - 1; it++)
		if (*it == *(it - 1) && *it != *(it + 1))
			std::cout << *it << " ";
	system("pause");
}
Мановар вне форума Ответить с цитированием
Старый 01.06.2017, 13:42   #5
Rainbow_
Пользователь
 
Регистрация: 18.03.2017
Сообщений: 35
По умолчанию

Спасибо, буду пробовать!
Rainbow_ вне форума Ответить с цитированием
Старый 02.06.2017, 11:47   #6
Rainbow_
Пользователь
 
Регистрация: 18.03.2017
Сообщений: 35
По умолчанию

Для меня пока самый понятный ответ от Serge_Bliznykova. Всё работает, всем спасибо за участие!
Rainbow_ вне форума Ответить с цитированием
Старый 23.10.2021, 17:50   #7
Valkorchik
Новичок
Джуниор
 
Регистрация: 23.10.2021
Сообщений: 1
По умолчанию Спасибо

Добрый вечер из 2021. Не думал, что смогу решить свою проблему, но благодаря вашим объяснениям все понял и разрешил вопрос дня. Огромное спасибо!
Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
верно.
и ещё вариант - просматривать, был ли найденный символ ранее, если был - не выводить найденный.

например:
Код:
    for(int i=0;i<size;i++)
    {
        for (int j=i+1;j<size; j++)
        {
            if(ar[i]==ar[j]) 
            {
              int wasBefore=0;
              for(int k=0;k<i;k++){
              	if(ar[k]==ar[i]) {
              		wasBefore=1; break;
              	}
              }
              if(wasBefore==0){
                 cout<<ar[i]<<" ";
              }
              break;
            }
        }
    }
Valkorchik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти в массиве повторяющиеся элементы и записать только уникальные элементы в новый массив из первого массива REztor C# (си шарп) 0 20.06.2015 16:55
не повторяющиеся значения комбобокса shalun43911 Компоненты Delphi 1 08.05.2014 13:40
повторяющиеся значения в combobox ondar Microsoft Office Excel 5 07.10.2010 17:47
Повторяющиеся значения iid2007 Microsoft Office Access 2 16.09.2008 05:54
Повторяющиеся значения в БД. cpGrey БД в Delphi 4 29.01.2008 18:32