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

Алгоритм выбора элементов, встречающихся в массиве более одного раза - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Nell
1 / 1 / 0
Регистрация: 21.12.2009
Сообщений: 41
07.01.2010, 21:35     Алгоритм выбора элементов, встречающихся в массиве более одного раза #1
Задача:Дан одномерный массив А(размерностью N). Разработать алгоритм выбора элементов, встречающихся в массиве А более одного раза.
Есть примерное решение задачи, но оно неправильное.Нужно очень срочно. Чтобы получить зачет за семестр.

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 "stdafx.h" //здесь ошибка - [U]Unable to open include file 'stdafx.h' [/U]
#include <iostream>
using namespace std; //здесь кажется тоже ошибка -[U]Declaration syntax error[/U]
 
void main()
{
        int n;
        cout<<"Input lenth: "; //просим ввести размер массива
        cin>>n; //считываем, что ввели
        int *a=new int[n]; //захватываем память под массив
        cout<<"Please, init data: "; //просим проинициализировать элементы массива
        for(int i=0; i<n; i++) //обходим все элементы
                cin>>a[i]; //считываем текущий элемент
        bool *t=new bool[n]; //создали массив, чтобы хранить номера повторяющихся элементов
        for(int i=0; i<n; i++) //опять обходим все элементам массива
        {
                t[i]=false; //проинициализировали массив индексов по-уолчанию ("false" означает, что элемент встречается один раз)
                for(int j=i+1; j<n; j++) //вложенный цикл, необходим для сравнения одного элемента с другими, начинаем сравнение с последующего элемента, так как впередистоящие уже проверенные
                        if(a[i]==a[j]) //если элементы совпали
                        {
                                t[i]=true; //поставили метку в массив индексов ("true" означает, что элемент повторяется)
                                for(int k=0; k<i; k++) //сравниваем с предыдущими, для случая, когда элемент встречается более 2-х раз
                                        if(a[i]==a[k]) //если мы уже находили этот элемент масива ранее
                                        {
                                                t[i]=false; //отменяем метку
                                                k=i; //для того, чтобы выйти из вложенного цикла по k и не делать лишних стравнений
                                        }
                                j=n; //для того, чтобы выйти из вложенного цикла по j и не делать лишнх сравнений
                        }
        }
        //после работы цикла у нас есть массив "t", в сотором отмечены номера всех повторяющихся элементов, выведем на экран эти элементы:
        for(int i=0; i<n; i++)
                if(t[i]==true) //если элемент повторяющийся
                        cout<<a[i]<<' '; //выводим элемент и пробел после него для красоты :)
        system("pause");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.01.2010, 21:35     Алгоритм выбора элементов, встречающихся в массиве более одного раза
Посмотрите здесь:

найти максимальное из чисел встречающихся в данном одномерном массиве более одного раза C++
Подсчитать, сколько элементов встречаются в массиве более одного раза. C++
C++ Максимальное из чисел, встречающихся в заданной матрице более одного раза
Определить максимальное из значений, встречающихся в заданной матрице более одного раза C++
C++ Определить максимальное из чисел, встречающихся в заданной матрице более одного раза
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TanT
эволюционирую потихоньку
 Аватар для TanT
464 / 462 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
07.01.2010, 21:38     Алгоритм выбора элементов, встречающихся в массиве более одного раза #2
а ты попробуй первую строку #include "stdafx.h" убрать на..., совсем то есть убрать
Rififi
 Аватар для Rififi
2330 / 1045 / 43
Регистрация: 03.05.2009
Сообщений: 2,656
07.01.2010, 21:52     Алгоритм выбора элементов, встречающихся в массиве более одного раза #3
Nell,

Разработать алгоритм выбора элементов, встречающихся в массиве А более одного раза.

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
#include <string>
#include <map>
#include <algorithm>
#include <iostream>
#include <locale>
 
#include <boost/lambda/lambda.hpp>
using namespace boost::lambda;
 
int main()
{
        setlocale(LC_ALL, "");
 
        const size_t N = 10;
        int A[N] = {...}; // заполнение массива
 
        typedef std::map<int, size_t> Z;
        Z z;
 
        std::for_each(A, A+N, ++var(z)[_1]);
 
        for (Z::const_iterator it = z.begin(); it != z.end(); ++it)
                if (it->second > 1)
                        std::cout << it->first << std::endl;
 
        return 0;
}
Nell
1 / 1 / 0
Регистрация: 21.12.2009
Сообщений: 41
07.01.2010, 23:20  [ТС]     Алгоритм выбора элементов, встречающихся в массиве более одного раза #4
RIFIFI Я сомневаюсь , что эта задача будет работать
Так как я вижу что вот тут будет неправильно
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
#include <string>
#include <map>
#include <algorithm>
#include <iostream>    -"<iostream.h>" в других будет также
#include <locale>
 
#include <boost/lambda/lambda.hpp>
using namespace boost::lambda;            - здесь тоже что-то не так
 
int main()
{
        setlocale(LC_ALL, "");
 
        const size_t N = 10;
        int A[N] = {...}; // заполнение массива
 
        typedef std::map<int, size_t> Z;
        Z z;
 
        std::for_each(A, A+N, ++var(z)[_1]);
 
        for (Z::const_iterator it = z.begin(); it != z.end(); ++it)
                if (it->second > 1)
                        std::cout << it->first << std::endl;
 
        return 0;
}
Rififi
 Аватар для Rififi
2330 / 1045 / 43
Регистрация: 03.05.2009
Сообщений: 2,656
07.01.2010, 23:40     Алгоритм выбора элементов, встречающихся в массиве более одного раза #5
Nell,

Я сомневаюсь , что эта задача будет работать

Сомневаешься? Чё, правда что ли?

"тут будет неправильно", "здесь тоже что-то не так", прямо страсти какие...


программа была написана с использованием
Visual Studio 2008
Библиотеки boost (www.boost.org)

http://s43.***********/i102/1001/6d/767123e7f34c.jpg

Выполни эти условия, и снизойдёт на тебя благодать.
Nell
1 / 1 / 0
Регистрация: 21.12.2009
Сообщений: 41
08.01.2010, 00:10  [ТС]     Алгоритм выбора элементов, встречающихся в массиве более одного раза #6
Но у меня не Visual Studio 2008
Может написать на TurboC_3(TurboC++IDE) пожалуста
Можно даже на TurboPascal
Нужно на TurboPascal или TurboC++IDE ,больше ни на чем нельзя


P.S. Ты женщина?
Yandex
Объявления
08.01.2010, 00:10     Алгоритм выбора элементов, встречающихся в массиве более одного раза
Ответ Создать тему
Опции темы

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