Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.97/34: Рейтинг темы: голосов - 34, средняя оценка - 4.97
9 / 9 / 2
Регистрация: 11.01.2013
Сообщений: 157

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

11.01.2014, 20:14. Показов 7888. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.01.2014, 20:14
Ответы с готовыми решениями:

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

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

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

37
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
12.01.2014, 00:29
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Tulosba Посмотреть сообщение
минимум чего?
По коду выше, пытаюсь найти минимальный натуральный элемент массива (т.е. больше нуля). Можно было-бы через std::for_each пройтись, но там лямбду надо да и опять тоже сравнение будет, хотелось бы что-бы std::min_element как то не брал во внимание нулевые значения.

Добавлено через 1 минуту
koto_fey, п.с. надо добавить еще выход при пустой строке (:
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
12.01.2014, 00:34
Цитата Сообщение от xoror Посмотреть сообщение
unsigned Freq[256] = {0};
C++
1
unsigned Freq[256] = {};
тоже покатит
1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
12.01.2014, 00:51
Цитата Сообщение от MrGluck Посмотреть сообщение
C++
1
unsigned Freq[256] = {};
тоже покатит
Плохо только, что:
- unsigned;
- опущен int;
- размер захардкожен.

Цитата Сообщение от outoftime Посмотреть сообщение
не брал во внимание нулевые значения.
Тут уж, либо свой предикат, либо удалить неугодные элементы перед поиском. Третьего не дано.
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
12.01.2014, 01:21
koto_fey, если вопросов нет, значит вам все понятно.

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

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

Не по теме:

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

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

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

Добавлено через 3 минуты
Аааа! Кажись допер.
Получается что мы передаем массиву строку и потом как индекс ее прибавляем посимвольно, тем самым ее сканируем. Ну или вроде того.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38223 / 21155 / 4314
Регистрация: 12.02.2012
Сообщений: 34,768
Записей в блоге: 14
12.01.2014, 12:58
Цитата Сообщение от xoror Посмотреть сообщение
В цикле идет только обнуление всех элементов массива. 256 итераций!
- это копейки.

Добавлено через 1 минуту
Цитата Сообщение от Tulosba Посмотреть сообщение
Благодаря строке 10 она у Вас как минимум квадратичная.
- с какого перепуга? Там один цикл до n...
0
 Аватар для xoror
31 / 31 / 4
Регистрация: 15.12.2013
Сообщений: 147
12.01.2014, 13:06
Цитата Сообщение от 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
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38223 / 21155 / 4314
Регистрация: 12.02.2012
Сообщений: 34,768
Записей в блоге: 14
12.01.2014, 13:13
Цитата Сообщение от xoror Посмотреть сообщение
И на каждой итерации вызывается функция strlen() для вычисления длины этой строки
- не думаю... Компилятор не так глуп.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
12.01.2014, 13:15
Цитата Сообщение от Catstail Посмотреть сообщение
с какого перепуга? Там один цикл до n...
см. сообщение #15 Самый редко встречающийся элемент в массиве
0
 Аватар для xoror
31 / 31 / 4
Регистрация: 15.12.2013
Сообщений: 147
12.01.2014, 13:30
Catstail наверно уже пожалел о том, что помог с решением задачи Вон какую критику получил
А с другой стороны это правильно. Ведь на ошибках учатся.
0
1406 / 648 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
12.01.2014, 13:51
Цитата Сообщение от Catstail Посмотреть сообщение
- не думаю... Компилятор не так глуп.
Если бы вместо char* s было бы const char* s, то компилятор скорее всего соптимизировал, а так - нет
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38223 / 21155 / 4314
Регистрация: 12.02.2012
Сообщений: 34,768
Записей в блоге: 14
12.01.2014, 14:39
Цитата Сообщение от xoror Посмотреть сообщение
Вон какую критику получил
- да не критика это вовсе... Мелкая придирка. Во-первых, оптимизирующий компилятор в состоянии распознать, что в цикле строка не меняется, так что нет необходимости перевычислять эту длину на каждом витке. А во-вторых, код легко чуть подправить, и база для "критики" исчезнет:

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
void PrintRare(char *s)
{
    unsigned int i,min,l,Freq[256];
    char q;
 
    l=strlen(s);
 
    /* в Freq[i] будет частота символа с кодом i */ 
 
    for (i=0; i<256; i++) Freq[i]=0; /* чистим */
 
    for (i=0; i<l; i++)
    {
        q=s[i];       /* код очередного символа */
        Freq[q]++; /* увеличиваем соотв. элемент Freq */
    }
 
    /* ищем минимум частот (отличных от нуля!) */
 
    min=l;
 
    for (i=0; i<256; i++)
        if ((Freq[i] > 0) && (Freq[i] < min)) min=Freq[i]; /* если частота символа меньше текущей
                                                                            запомним */
 
    /* печать символов (всех) у которых частота минимальна */
 
    for (i=0; i<256; i++)
        if (Freq[i] == min)
        {
            q=i;
            cout << q << endl;
        }
}
вот и все... Комментарии - по просьбе TC.
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
12.01.2014, 15:37
Цитата Сообщение от Catstail Посмотреть сообщение
Во-первых, оптимизирующий компилятор в состоянии распознать, что в цикле строка не меняется, так что нет необходимости перевычислять эту длину на каждом витке.
вы попробуйте тест запустить, у меня вот совершенно разный результат выдает. Да даже если разница заметна лишь в дебаге, юнит тесты никто не отменял.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38223 / 21155 / 4314
Регистрация: 12.02.2012
Сообщений: 34,768
Записей в блоге: 14
12.01.2014, 21:13
Цитата Сообщение от MrGluck Посмотреть сообщение
совершенно разный результат выдает
- разный с чем?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
12.01.2014, 21:17
Цитата Сообщение от Catstail Посмотреть сообщение
- разный с чем?
разный при использовании
C++
1
2
l=strlen(s);
for (i=0; i<l; i++)
и
C++
1
for (i=0; i < strlen(s); i++)
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38223 / 21155 / 4314
Регистрация: 12.02.2012
Сообщений: 34,768
Записей в блоге: 14
12.01.2014, 21:46
Вероятно, это зависит от реализации компилятора.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.01.2014, 21:46

В заданной матрице найти самый большой отрицательный элемент и самый маленький положительный и вывести их на экран
Помогите пожалуйста с заданиями) Задание 1: Напишите программу, которая создает двухмерный массив и заполняет его по следующему принципу:...

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

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

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

Найти чаще всего встречающийся элемент массива
#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; ...


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

Или воспользуйтесь поиском по форуму:
38
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru