Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/16: Рейтинг темы: голосов - 16, средняя оценка - 4.56
yeaahh
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 15
#1

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

15.03.2013, 20:34. Просмотров 2818. Ответов 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++
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2013, 20:34
Ответы с готовыми решениями:

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

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

Удалить из массива повторяющиеся элементы, оставив только их первые вхождения
Как мне удалять повторяющийся элемент? #include &lt;iostream&gt; using namespace...

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

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

15
eocron
Кактус
66 / 66 / 19
Регистрация: 23.05.2012
Сообщений: 342
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");
}
0
yeaahh
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 15
15.03.2013, 21:32  [ТС] #3
eocron:
1) массив из целых чисел;
2)тип, так как целые, то наверное int;
3)Оставить наверное первый попавшийся повторяющийся элемент во время прохождения по массиву..
0
eocron
Кактус
66 / 66 / 19
Регистрация: 23.05.2012
Сообщений: 342
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");
}
0
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 (то есть мы оставили только первый повторяющийся элемент, на своём месте)
0
eocron
Кактус
66 / 66 / 19
Регистрация: 23.05.2012
Сообщений: 342
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");
    
}
0
egor2116
571 / 375 / 215
Регистрация: 20.01.2013
Сообщений: 1,135
17.03.2013, 20:18 #7
Вам сюда
http://www.cyberforum.ru/order-program/
1
MrGluck
Модератор
Эксперт CЭксперт С++
8078 / 4930 / 1431
Регистрация: 29.11.2010
Сообщений: 13,357
17.03.2013, 20:22 #8
yeaahh, что значит
Цитата Сообщение от yeaahh Посмотреть сообщение
(m << n)
Добавлено через 52 секунды
Цитата Сообщение от yeaahh Посмотреть сообщение
наиболее часто
это относительное понятие, необходимо работать с конкретными данными, как определить, что еще не очень часто, а уже наиболее часто?
0
m1Rr0r
247 / 230 / 45
Регистрация: 05.02.2010
Сообщений: 3,283
Завершенные тесты: 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;
}
И т.д.
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++ , а это задание дали практически сегодня на завтра... Если Вам не трудно, могли бы вы мне помочь с этой задачей?..
0
MrGluck
Модератор
Эксперт CЭксперт С++
8078 / 4930 / 1431
Регистрация: 29.11.2010
Сообщений: 13,357
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 и освобождение памяти?
0
HighPredator
17.03.2013, 20:45
  #12
 Комментарий модератора 
yeaahh, правила форума п. 5.5: Запрещено размещать тему в нескольких разделах одновременно (кросспостинг), а также дублировать тему в одном разделе.
0
m1Rr0r
247 / 230 / 45
Регистрация: 05.02.2010
Сообщений: 3,283
Завершенные тесты: 2
17.03.2013, 20:47 #13
Цитата Сообщение от MrGluck Посмотреть сообщение
а где хедер cstdlib и освобождение памяти?
Разместил пост не для того чтобы ты исправлял.
Лучше когда человек сам подумает что к чему, хоть и с подсказкой.
Цитата Сообщение от MrGluck Посмотреть сообщение
cstdlib
Для чего ?
0
MrGluck
Модератор
Эксперт CЭксперт С++
8078 / 4930 / 1431
Регистрация: 29.11.2010
Сообщений: 13,357
17.03.2013, 20:51 #14
Цитата Сообщение от m1Rr0r Посмотреть сообщение
Разместил пост не для того чтобы ты исправлял.
Лучше когда человек сам подумает что к чему, хоть и с подсказкой.
Подумал над самой тяжелоуловимой ошибкой - утечкой памяти? Да вы либо садист, либо просто боитесь признать факт своей ошибки.

Цитата Сообщение от m1Rr0r Посмотреть сообщение
Для чего ?
srand и rand определны там, gcc данный код, например, не скомпилит
0
m1Rr0r
247 / 230 / 45
Регистрация: 05.02.2010
Сообщений: 3,283
Завершенные тесты: 2
17.03.2013, 20:55 #15
Предвижу хуливар...
0
HighPredator
5679 / 1998 / 721
Регистрация: 10.12.2010
Сообщений: 5,750
Записей в блоге: 3
17.03.2013, 20:59 #16
Цитата Сообщение от MrGluck Посмотреть сообщение
srand и rand определны там
Точно так.
Цитата Сообщение от m1Rr0r Посмотреть сообщение
Предвижу хуливар
Предвижу наказания за попытку холиварить
1
17.03.2013, 20:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2013, 20:59

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

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

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


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

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