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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.90
yeaahh
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 15
#1

Массив: Удалить все повторяющиеся элементы, оставив в массиве только один. - C++

15.03.2013, 20:34. Просмотров 2640. Ответов 15
Метки нет (Все метки)

Помогите, народ! Срочно нужна программа.
Собственно задание:
В целочисленном массиве k(n), заданном случайным образом, много повторяющихся элементов. Найти (в процентах) частоту появления
каждого из m наиболее часто встречающихся элементов (m << n). Удалить все повторяющиеся элементы, оставив в массиве только один.

Добавлено через 1 час 23 минуты
Нашёл код, написанный в паскале по 1-й части задания:
Pascal
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
const
  n=30;
  m=2;
var
  mas: array[1..n] of word;
  popular: array[1..n, 1..2] of word;
  f, p, i, j, k: word;
begin
  randomize;
  for i := 1 to n do
  begin
    mas[i] := random(5);
    write(mas[i]:2)
  end;
  for i := 1 to n-1 do
  for j := i+1 to n do
  if mas[i] > mas[j] then
  begin
    k := mas[i];
    mas[i] := mas[j];
    mas[j] := k
  end;
  writeln;
  i := 1;
  p := 1;
  writeln('Vsego');
  repeat
    k := 1;
    while (mas[i] = mas[i+1])and(i<n) do
    begin
      inc(k);
      inc(i);
    end;
    writeln(mas[i], ' - ', k*100/n:0:2, '%');
    popular[p, 1] := k;
    popular[p, 2] := mas[i];
    inc(p);
    inc(i)
  until i > n;
  for i := 1 to p-2 do
  for j := i+1 to p-1 do
  if popular[i, 1] < popular[j, 1] then
  for f := 1 to 2 do
  begin
    k := popular[i, f];
    popular[i, f] := popular[j, f];
    popular[j, f] := k
  end;
  writeln('Itogo');
  if p > m then p := m;
  for i := 1 to p do
  writeln(popular[i, 2], ' - ', popular[i, 1]*100/n:0:2, '%');
  readln
end.
Если кто может, переделайте пожалуйста для c++
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2013, 20:34     Массив: Удалить все повторяющиеся элементы, оставив в массиве только один.
Посмотрите здесь:

Одномерные массивы, удалить все повторяющиеся элементы, оставив только первые вхождения - C++
Задача на C++: из заданного массива удалить все повторяющиеся элементы, оставив только их первые вхождения. Вот моя программа, помогите...

Удалить из массива повторяющиеся элементы, оставив только их первые вхождения - C++
Помогите, зачёт пишу

Удалить из массива повторяющиеся элементы, оставив только их первые вхождения - C++
Как мне удалять повторяющийся элемент? #include &lt;iostream&gt; using namespace std; int main () {float a; int n,k=0; cout&lt;&lt;&quot;n=&quot;;...

Удалить из строки все повторяющиеся буквы, оставив только их первые вхождения - C++
2.Даны строки, содержащие латинские буквы. Удалить из строки все повторяю* щиеся буквы, оставив только их первые вхождения.

Удалить из очереди все повторяющиеся слова, оставив только их первые вхождения - C++
Создать очередь, содержащую слова. Удалить из очереди все повторяющиеся слова, оставив только их первые вхождения. Например, если...

удалить из массива повторяющиеся элементы, оставив только их первые вхождения. класс-контейнер вектор - C++
Добрый день!!! Не могли бы помочь написать программу на С++ при помощи класса-контейнера вектора. вот код)) Заранее спасибо! #include...

Одномерный динамический массив (удалить все вещественные числа, оставив только целые) - C++
Здравствуйте!Помогите,пожалуйста,надо из динамического массива удалить все вещественные числа, оставив только целые, полу-ченный массив...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
eocron
Кактус
66 / 66 / 6
Регистрация: 23.05.2012
Сообщений: 343
15.03.2013, 21:28     Массив: Удалить все повторяющиеся элементы, оставив в массиве только один. #2
Какие элементы? Тип задан или любые? Оставить один....какой? любой?

Добавлено через 33 минуты
В любом случае вот код для показа процентов:

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
#include <iostream>
#include <map>
 
using namespace std;
 
template<typename T>
void show(T *array,int size)
{
     typedef typename std::map<T,int> TMap;
     typedef typename TMap::iterator iterator;
     TMap res;
 
     for(int i=0;i<size;i++)
     {
             res[ array[i] ]++;
     }
     
     for(iterator it=res.begin(); it!=res.end(); ++it)
     {
             cout << it->first << '\t' << ((double)it->second/(double)size)*100 <<'%'<< '\n';
     }
}
 
int main()
{
    int t[10000];
    for(int i=0;i<10000;i++)
    {
            t[i]=rand()%10;
    }
 
    show(t,10000);
    
    system("pause");
}
yeaahh
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 15
15.03.2013, 21:32  [ТС]     Массив: Удалить все повторяющиеся элементы, оставив в массиве только один. #3
eocron:
1) массив из целых чисел;
2)тип, так как целые, то наверное int;
3)Оставить наверное первый попавшийся повторяющийся элемент во время прохождения по массиву..
eocron
Кактус
66 / 66 / 6
Регистрация: 23.05.2012
Сообщений: 343
15.03.2013, 21:45     Массив: Удалить все повторяющиеся элементы, оставив в массиве только один. #4
Удалить все элементы из массива - это как? Произвести замену или функция должна вернуть тот самый единственный элемент?
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
37
38
39
40
41
42
43
44
45
#include <iostream>
#include <map>
 
using namespace std;
 
template<typename T>
T show(T *array,int size)
{
     typedef typename std::map<T,int> TMap;
     typedef typename TMap::iterator iterator;
     TMap res;
     int int_buf=0;
     T buf;
     //calculating appearence for each elemnt
     for(int i=0;i<size;i++)
     {
             res[ array[i] ]++;
             //parallel find of most popular element
             if(res[array[i]]>int_buf)
             {
                    buf=array[i];
                    int_buf=res[array[i]];
             }
     }
     //print all shit out
     for(iterator it=res.begin(); it!=res.end(); ++it)
     {
             cout << it->first << '\t' << ((double)it->second/(double)size)*100 <<'%'<< '\n';
     }
     //here you can delete "array" or do whatever you want with it
     return buf;
}
 
int main()
{
    int t[10000];
    for(int i=0;i<10000;i++)
    {
            t[i]=rand()%10;
    }
 
    cout<<show(t,10000)<<endl;
    
    system("pause");
}
yeaahh
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 15
15.03.2013, 21:54  [ТС]     Массив: Удалить все повторяющиеся элементы, оставив в массиве только один. #5
Это по ходу удалить повторяющиеся элементы, а оставить все не повторяющиеся + 1-й повторяющийся, который попался при прохождении по массиву (оставить повторяющийся элемент на своём месте)

Добавлено через 2 минуты
то есть к примеру дан массив:
3 5 7 5 9 2 1 5 6 - повторяются пятёрки, то есть в ответе будет массив: 3 5 7 9 2 1 6 (то есть мы оставили только первый повторяющийся элемент, на своём месте)
eocron
Кактус
66 / 66 / 6
Регистрация: 23.05.2012
Сообщений: 343
15.03.2013, 22:06     Массив: Удалить все повторяющиеся элементы, оставив в массиве только один. #6
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
37
38
39
40
41
42
43
44
#include <iostream>
#include <map>
 
using namespace std;
 
template<typename T>
void show(T *array,int size)
{
     typedef typename std::map<T,int> TMap;
     typedef typename TMap::iterator iterator;
     TMap res;
     T buf;
     //calculating appearence for each elemnt
     for(int i=0;i<size;i++)
     {
             res[ array[i] ]++;
             //parallel find second multi-appearence
             if(res[array[i]]>1)
             {
                     //delete array[i];
                     array[i]=-1; //umm..-1..or...0....or whatever means delete to you
             }
     }
     
     //print all shit out
     for(iterator it=res.begin(); it!=res.end(); ++it)
     {
             cout << it->first << '\t' << ((double)it->second/(double)size)*100 <<'%'<< '\n';
     }
}
 
int main()
{
    int t[10000];
    for(int i=0;i<10000;i++)
    {
            t[i]=rand()%10;
    }
 
    show(t,10000);
    
    system("pause");
    
}
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,123
17.03.2013, 20:18     Массив: Удалить все повторяющиеся элементы, оставив в массиве только один. #7
Вам сюда
http://www.cyberforum.ru/order-program/
MrGluck
Модератор
Эксперт CЭксперт С++
7153 / 4319 / 630
Регистрация: 29.11.2010
Сообщений: 11,739
17.03.2013, 20:22     Массив: Удалить все повторяющиеся элементы, оставив в массиве только один. #8
yeaahh, что значит
Цитата Сообщение от yeaahh Посмотреть сообщение
(m << n)
Добавлено через 52 секунды
Цитата Сообщение от yeaahh Посмотреть сообщение
наиболее часто
это относительное понятие, необходимо работать с конкретными данными, как определить, что еще не очень часто, а уже наиболее часто?
m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,256
Завершенные тесты: 2
17.03.2013, 20:28     Массив: Удалить все повторяющиеся элементы, оставив в массиве только один. #9
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
#include <iostream>
#include <time.h>
 
using namespace std;
 
int main()  {
    srand(time(NULL));
    int n;
    int *k;
    cout << "n = ";
    cin >> n;
 
    if(n <= 0)
        return 1;
    k = new int[n];
 
    for(int i = 0; i < n; i++)  {
        k[i] = rand() % 100;
        cout << k[i] << ((i < n - 1) ? "  " : "");
    }
    cout << endl;
 
 
    return 0;
}
И т.д.
yeaahh
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 15
17.03.2013, 20:44  [ТС]     Массив: Удалить все повторяющиеся элементы, оставив в массиве только один. #10
наиболее часто встречающиеся элементы - это просто повторяющиеся элементы.

Добавлено через 2 минуты
Цитата Сообщение от m1Rr0r Посмотреть сообщение
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
#include <iostream>
#include <time.h>
 
using namespace std;
 
int main()  {
    srand(time(NULL));
    int n;
    int *k;
    cout << "n = ";
    cin >> n;
 
    if(n <= 0)
        return 1;
    k = new int[n];
 
    for(int i = 0; i < n; i++)  {
        k[i] = rand() % 100;
        cout << k[i] << ((i < n - 1) ? "  " : "");
    }
    cout << endl;
 
 
    return 0;
}
И т.д.
Я просто только начинаю программировать на c++ , а это задание дали практически сегодня на завтра... Если Вам не трудно, могли бы вы мне помочь с этой задачей?..
MrGluck
Модератор
Эксперт CЭксперт С++
7153 / 4319 / 630
Регистрация: 29.11.2010
Сообщений: 11,739
17.03.2013, 20:44     Массив: Удалить все повторяющиеся элементы, оставив в массиве только один. #11
Цитата Сообщение от m1Rr0r Посмотреть сообщение
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
#include <iostream>
#include <time.h>
 
using namespace std;
 
int main()  {
    srand(time(NULL));
    int n;
    int *k;
    cout << "n = ";
    cin >> n;
 
    if(n <= 0)
        return 1;
    k = new int[n];
 
    for(int i = 0; i < n; i++)  {
        k[i] = rand() % 100;
        cout << k[i] << ((i < n - 1) ? "  " : "");
    }
    cout << endl;
 
 
    return 0;
}
И т.д.
а где хедер cstdlib и освобождение памяти?
HighPredator
17.03.2013, 20:45
  #12
 Комментарий модератора 
yeaahh, правила форума п. 5.5: Запрещено размещать тему в нескольких разделах одновременно (кросспостинг), а также дублировать тему в одном разделе.
m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,256
Завершенные тесты: 2
17.03.2013, 20:47     Массив: Удалить все повторяющиеся элементы, оставив в массиве только один. #13
Цитата Сообщение от MrGluck Посмотреть сообщение
а где хедер cstdlib и освобождение памяти?
Разместил пост не для того чтобы ты исправлял.
Лучше когда человек сам подумает что к чему, хоть и с подсказкой.
Цитата Сообщение от MrGluck Посмотреть сообщение
cstdlib
Для чего ?
MrGluck
Модератор
Эксперт CЭксперт С++
7153 / 4319 / 630
Регистрация: 29.11.2010
Сообщений: 11,739
17.03.2013, 20:51     Массив: Удалить все повторяющиеся элементы, оставив в массиве только один. #14
Цитата Сообщение от m1Rr0r Посмотреть сообщение
Разместил пост не для того чтобы ты исправлял.
Лучше когда человек сам подумает что к чему, хоть и с подсказкой.
Подумал над самой тяжелоуловимой ошибкой - утечкой памяти? Да вы либо садист, либо просто боитесь признать факт своей ошибки.

Цитата Сообщение от m1Rr0r Посмотреть сообщение
Для чего ?
srand и rand определны там, gcc данный код, например, не скомпилит
m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,256
Завершенные тесты: 2
17.03.2013, 20:55     Массив: Удалить все повторяющиеся элементы, оставив в массиве только один. #15
Предвижу хуливар...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2013, 20:59     Массив: Удалить все повторяющиеся элементы, оставив в массиве только один.
Еще ссылки по теме:

Удалить из слова все повторяющиеся буквы, оставив их первые вхождения - C++
Условие:Дано слово. Удалить из него все повторяющиеся буквы, оставив их первые вхождения: в слове должны остаться только различные буквы. ...

Дан целочисленный массив размера N. Удалить из массива все одинаковые элементы, оставив их последние вхождения - C++
#include &lt;iostream&gt; #include &lt;ctime&gt; using namespace std; int main() { setlocale(LC_ALL, &quot;rus&quot;); int n, i; time_t t;...

Дан целочисленный массив размера N. Удалить из массива все одинаковые элементы, оставив их первые вхождения. - C++
Дан целочисленный массив размера N. Удалить из массива все одинаковые элементы, оставив их первые вхождения.

Дан целочисленный массив размера N. Удалить из массива все одина- ?ковые элементы, оставив их первые вхождения - C++
Всем привет у меня тут проблемка, может кто подскажет ?Дан целочисленный массив размера N. Удалить из массива все одина- ?ковые...

Удалить повторяющиеся элементы в отсортированнном массиве - C++
пример такого массива I={0,1,3,3,3,5,6,8,10,10} Т.е. я так понимаю, нужно сдигать все элементы при повторении влево, и записывать в инт...


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

Или воспользуйтесь поиском по форуму:
HighPredator
5474 / 1840 / 342
Регистрация: 10.12.2010
Сообщений: 5,431
Записей в блоге: 3
17.03.2013, 20:59     Массив: Удалить все повторяющиеся элементы, оставив в массиве только один. #16
Цитата Сообщение от MrGluck Посмотреть сообщение
srand и rand определны там
Точно так.
Цитата Сообщение от m1Rr0r Посмотреть сообщение
Предвижу хуливар
Предвижу наказания за попытку холиварить
Yandex
Объявления
17.03.2013, 20:59     Массив: Удалить все повторяющиеся элементы, оставив в массиве только один.
Ответ Создать тему
Опции темы

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