Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
koto_fey
5 / 5 / 1
Регистрация: 11.01.2013
Сообщений: 116
#1

Самый редко встречающийся элемент в массиве - C++

11.01.2014, 20:14. Просмотров 1370. Ответов 37
Метки нет (Все метки)

Всех приветствую!
Прошу помощи. Собственно идея задачи вроде бы проста нужно найти самый часто и редко встречающийся эллемент в массиве.

Вот я написал для поиска частого элемента и поиска редкого, загвостка в том что он выводит только одно вхождение, т.е. если несколько элементов встречаются одинаковое колличества раз, то он выводит только последние увиденные.
вот код, для вывода редко встречающегося ээлемента. Как сделать что бы он все выводил а не один.
Точнее куда запендюрить вывод. Вставляя в циклы он мне всякую ерись выдает. (код написан на MVS 2010)
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
void main(void)
{   int n;
    cin>>n;
    char *m=new char[n];
 
    for (int i=0;i<n; i++)
    {
      //m[i]=rand()%100;
        cin>>m[i];
 
    //  cout<<" "<<m[i];
    }
       int k=0,k1=0,kmax,kmin;int i=0,j,fi,fj=0;
      
       while(i<n)
       {
           kmax=0;
 
           for(j=i+1;j<n;j++)   
         {
             
             if(m[j]!=m[i])         
             { 
 
                 k++;
                 fi=j;       
             
             }  
            
         }
           
        i++;
        
      
       }
     
      cout<<" "<<m[fi]; 
       delete m;
        _getch();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.01.2014, 20:14
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Самый редко встречающийся элемент в массиве (C++):

Самый редко встречаемый символ - C++
Задан массив A. Найти самый редко встречаемый символ. Может быть пригодится кому, но вот исходник задачи обратной - самый часто...

Найти самый часто встречающийся символ в тексте - C++
я &quot;сделал&quot; программу шифратор и дешифратор текста по методу цезаря, но теперь мне надо сделать так чтобы программа показывала самый...

Найти в массиве элемент, самый близкий по величине к заданному числу - C++
Напишите программу, которая находит в массиве элемент, самый близкий по величине к данному числу. С++ Входные данные В первой...

Вывести те числа, которые наиболее редко встречаются в массиве и количество их повторений - C++
Дан одномерный массив из 150 случайных целых чисел в диапазоне от 14 до 37 включительно. Вывести те числа, которые наиболее редко...

Определить, какой символ наиболее редко встречается в заданном массиве(шаблоны) - C++
Доброго времени суток, товарищи эксперты! Написал программу по следующему заданию: Задан массив int A, элементы которого могут быть...

Найти второй самый большой элемент массива и второй самый маленький элемент массива - C++
Помогите пожалуйста: Найти второй самый большой элемент массива и второй самый маленький элемент массива.

37
xoror
29 / 31 / 2
Регистрация: 15.12.2013
Сообщений: 147
11.01.2014, 23:44 #16
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
for (i=0; i<256; i++){cout<<Freq[i]<<" "; Freq[i]=0; cout<<Freq[i]<<endl;}
отличается от этого
Цитата Сообщение от Catstail Посмотреть сообщение
C++
1
2
3
4
5
6
void PrintRare(char *s) 
{ 
   unsigned int i,min,Freq[256]; 
   char q; 
   
   for (i=0; i<256; i++) Freq[i]=0;
В цикле идет только обнуление всех элементов массива. 256 итераций!

Массив можно обнулить при его инициализации
C++
1
unsigned int Freq[256] = {0};
1
koto_fey
5 / 5 / 1
Регистрация: 11.01.2013
Сообщений: 116
11.01.2014, 23:45  [ТС] #17
Содержательный ответ.
0
Ev_Hyper
11.01.2014, 23:49
  #18

Не по теме:

xoror, не сразу понял о чем ты

0
outoftime
║XLR8║
755 / 655 / 88
Регистрация: 25.07.2009
Сообщений: 3,289
Записей в блоге: 5
12.01.2014, 00:15 #19
Tulosba, действительно квадрат, но это больше вопрос оптимизации нежели сложности самого алгоритма, так что терпимо (:
koto_fey,
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
#include <iostream>
#include <algorithm>
#include <iterator>
#include <cstring>
 
void PrintRare(const char *str)
{
    const int n = 256;
    std::size_t frequency[n] = {0},
                strlen       = std::strlen(str);
 
    for (int i = 0; i < strlen; ++frequency[str[i++]]);
 
    std::size_t max = *std::max_element(std::begin(frequency), std::end(frequency)),
                min = max;
    for (int i = 0; i < n; ++i)
    {
        if (frequency[i])
        {
            min = std::min(min, frequency[i]);
        }
    }
 
    for (const std::size_t &count : {min, max})
    {
        for (int i = 0; i < n; ++i)
        {
            if (frequency[i] == count)
                std::cout << char(i) << " ";
        }
        std::cout << std::endl;
    }
}
 
int main(int argc, char* argv[])
{
    char *S = "aasaassgkldfkeej";
    PrintRare(S);
    return 0;
}
Это типа средней сложности (я о сложности кода). Кто знает как можно найти минимум используя библиотечные функции? Просто там надо отфильтровывать все нули, в общем то в этим у меня и возникла проблема.
0
Tulosba
:)
Эксперт С++
4705 / 3240 / 297
Регистрация: 19.02.2013
Сообщений: 9,046
12.01.2014, 00:17 #20
Цитата Сообщение от outoftime Посмотреть сообщение
Кто знает как можно найти минимум используя библиотечные функции?
минимум чего?
0
outoftime
║XLR8║
755 / 655 / 88
Регистрация: 25.07.2009
Сообщений: 3,289
Записей в блоге: 5
12.01.2014, 00:29 #21
Цитата Сообщение от Tulosba Посмотреть сообщение
минимум чего?
По коду выше, пытаюсь найти минимальный натуральный элемент массива (т.е. больше нуля). Можно было-бы через std::for_each пройтись, но там лямбду надо да и опять тоже сравнение будет, хотелось бы что-бы std::min_element как то не брал во внимание нулевые значения.

Добавлено через 1 минуту
koto_fey, п.с. надо добавить еще выход при пустой строке (:
0
MrGluck
Модератор
Эксперт CЭксперт С++
7789 / 4829 / 750
Регистрация: 29.11.2010
Сообщений: 13,182
12.01.2014, 00:34 #22
Цитата Сообщение от xoror Посмотреть сообщение
unsigned Freq[256] = {0};
C++
1
unsigned Freq[256] = {};
тоже покатит
1
Tulosba
:)
Эксперт С++
4705 / 3240 / 297
Регистрация: 19.02.2013
Сообщений: 9,046
12.01.2014, 00:51 #23
Цитата Сообщение от MrGluck Посмотреть сообщение
C++
1
unsigned Freq[256] = {};
тоже покатит
Плохо только, что:
- unsigned;
- опущен int;
- размер захардкожен.

Цитата Сообщение от outoftime Посмотреть сообщение
не брал во внимание нулевые значения.
Тут уж, либо свой предикат, либо удалить неугодные элементы перед поиском. Третьего не дано.
0
outoftime
║XLR8║
755 / 655 / 88
Регистрация: 25.07.2009
Сообщений: 3,289
Записей в блоге: 5
12.01.2014, 01:21 #24
koto_fey, если вопросов нет, значит вам все понятно.

Добавлено через 55 секунд
Цитата Сообщение от Tulosba Посмотреть сообщение
Плохо только, что:
- unsigned;
- опущен int;
Почему плохо то? Это ведь равносильные описание типа. (unsigned int, unsigned)
0
koto_fey
5 / 5 / 1
Регистрация: 11.01.2013
Сообщений: 116
12.01.2014, 09:18  [ТС] #25
Да я уж спать лег в самый разгар темыу нас то 3 ночи было.
Вопросы чуть позже буду задовать и буду рад если на них ответят.

Добавлено через 47 секунд
вопросы позже буду задавать и если на них ответят буду очень рад.
0
outoftime
12.01.2014, 09:57
  #26

Не по теме:

koto_fey, а ты вставляй ссылки на имена, к кому обращаешься, тогда этому человеку придет сообщение что его упомянули "..не злим тихим словом.." Т.Г. Шевченко (:

0
koto_fey
5 / 5 / 1
Регистрация: 11.01.2013
Сообщений: 116
12.01.2014, 11:16  [ТС] #27
outoftime,
q=s[i];
Freq[q]++;
можешь пояснить вот это или как так получается что мы индексируем символом. Я че то в нашей нет помойке ни чего не нашел.

Добавлено через 32 секунды
Это из второго поста

Добавлено через 3 минуты
Аааа! Кажись допер.
Получается что мы передаем массиву строку и потом как индекс ее прибавляем посимвольно, тем самым ее сканируем. Ну или вроде того.
0
Catstail
Модератор
23456 / 11583 / 1886
Регистрация: 12.02.2012
Сообщений: 18,909
12.01.2014, 12:58 #28
Цитата Сообщение от xoror Посмотреть сообщение
В цикле идет только обнуление всех элементов массива. 256 итераций!
- это копейки.

Добавлено через 1 минуту
Цитата Сообщение от Tulosba Посмотреть сообщение
Благодаря строке 10 она у Вас как минимум квадратичная.
- с какого перепуга? Там один цикл до n...
0
xoror
29 / 31 / 2
Регистрация: 15.12.2013
Сообщений: 147
12.01.2014, 13:06 #29
Цитата Сообщение от Catstail Посмотреть сообщение
с какого перепуга? Там один цикл
И на каждой итерации вызывается функция strlen() для вычисления длины этой строки

Цитата Сообщение от Catstail Посмотреть сообщение
C++
1
2
3
4
5
for (i=0; i<strlen(s); i++) 
{ 
   q=s[i]; 
   Freq[q]++; 
}
Сама функция strlen() примерно так выглядит
C++
1
2
3
4
5
6
7
8
9
int strlen(const char *s)
{
   int i = 0;
   
   while (s[i])
      ++i;
 
   return i;
}
0
Catstail
Модератор
23456 / 11583 / 1886
Регистрация: 12.02.2012
Сообщений: 18,909
12.01.2014, 13:13 #30
Цитата Сообщение от xoror Посмотреть сообщение
И на каждой итерации вызывается функция strlen() для вычисления длины этой строки
- не думаю... Компилятор не так глуп.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.01.2014, 13:13
Привет! Вот еще темы с ответами:

Найти чаще всего встречающийся элемент массива - C++
#include &lt;iostream&gt; using namespace std; int main(void) { const int n=10; int a = { 1,2,0,1,2,1,3,3,4,2 }; int k,l,max; ...

Определить чаще всего встречающийся элемент массива - C++
Определить чаще всего встречающийся элемент массива А. Добавлено через 6 минут P.S. желательно использовать комментарии в коде=)...

Самый самый самый простой пример рекурсии - C++
приведите самый прост пример рекурсии)))void main(int k) { int n=10; k=n; k++; n=k; if(n!=20)main(n); ...

Самый часто встречаемый символ в массиве - C++
А как можно найти наиболее часто встречающийся символ в массиве из х элементов


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

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

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