Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 16.06.2019
Сообщений: 4
Записей в блоге: 1

Среди цифр введённой строки распечатать ту, которая встречалась чаще других

16.06.2019, 11:49. Показов 2776. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня написан уже код, все работает за исключением одной тонкости.
Если ввести комбинацию 33331111, то выведет цифру 1, как первую встретившуюся, а должно выводиться 3.
Прошу помощи, как мне объяснили, нужно создать массив, и сделать так, что бы в ячейки заносились максимальные комбинации, и потом через команду "strchr" что ли, найти ближайшее к началу строки значение из массива. Прошу вашей помощи, форумчане.

Так звучит задание:
1. Среди цифр введённой строки распечатать ту, которая встречается чаще других. Если цифр с одинаковой частотой появления несколько, то распечатать ту, которая встретилась первой

Предоставляю код:

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
46
47
48
#include "pch.h"
#include <iostream>
using namespace std;
 
#define n 11
 
int main()
{
    setlocale(LC_ALL, "RUS");
    cout << "Введите комбинацию цифр:" << endl;
    char str[99];
    cin >> str;
    int num[n] = { 0 };
    for (int i = 0; str[i]; i++)
    {
        if (str[i] == '0')
            num[0] += 1;
        else if (str[i] == '1')
            num[1] += 1;
        else if (str[i] == '2')
            num[2] += 1;
        else if (str[i] == '3')
            num[3] += 1;
        else if (str[i] == '4')
            num[4] += 1;
        else if (str[i] == '5')
            num[5] += 1;
        else if (str[i] == '6')
            num[6] += 1;
        else if (str[i] == '7')
            num[7] += 1;
        else if (str[i] == '8')
            num[8] += 1;
        else if (str[i] == '9')
            num[9] += 1;
    }
    int max = num[0], pos = 0;
    for (int i = 1; i < n; i++)
    {
        if (max < num[i])
        {
            max = num[i];
            pos = i;
        }
    }
    cout << "Цифра, встречающаяся чаще других: " << pos << endl << "Количество таких цифр:" << max << endl;
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.06.2019, 11:49
Ответы с готовыми решениями:

Среди цифр введенной строки распечатать ту, которая появлялась чаще других. Если таких цифр было несколько, распечатать ту, что встречалась первой
Среди цифр введенной строки распечатать ту, которая появлялась чаще других. Если таких цифр было несколько, распечатать ту, что...

Среди цифр введенной строки распечатать ту, которая появилась чаще других
Среди цифр введенной строки распечатать ту, которая появилась чаще других. Если таких цифр было несколько , распечатать ту, что...

Среди цифр введенной строки распечатать ту, которая появлялась чаще других
Среди цифр введенной строки распечатать ту, которая появлялась чаще других. Если таких цифр было несколько, распечатать ту, что встретилась...

11
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
16.06.2019, 12:32
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<iostream>
using namespace std;
 
int main()
{
    char str[99],ch;
    int count=0,max=0;
    cin >> str;
    for(int i=0;i<=9;i++){
      for(int j=0;j<strlen(str)-1;j++)
            if(i==str[j]-'0') count++;
 
      if(count>max){
        max=count;
        ch=i+'0';
        }
      count=0;
    }
   cout<<ch<<"  "<<max<<"\n";
  system("pause");
  return 0;
}
1
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
16.06.2019, 20:34
повар1, так:
Цитата Сообщение от повар1 Посмотреть сообщение
cin >> str;
введётся только первое слово строки и здесь
Цитата Сообщение от повар1 Посмотреть сообщение
j<strlen(str)-1
почему отнимается 1 ?

Alekson4ik,
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 <string>
using namespace std;
 
int main()
{     
    string s;
    cout << "String:\n";
    getline(cin, s);
    
    char size=s.size(), count, max=0, number=0;
    for(char i='0'; i<='9'; i++)
    {
      count=0;    
      for(char j=0; j<size; j++)
            if(i==s[j]) count++;
 
    if(count>max) {max=count;number=i;}   
    }
    
    cout << number << "\n";
    
  system("pause");
  return 0;
}
0
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
16.06.2019, 22:57
Yetty,
Цитата Сообщение от Yetty Посмотреть сообщение
char size=s.size(), count, max=0, number=0;
ну ни в какие ворота

Добавлено через 21 минуту
Значение слова Строка по Ожегову:
Строка — Ряд слов, букв или иных знаков (например нотных), написанных в одну линию

Добавлено через 1 минуту
Цитата Сообщение от повар1 Посмотреть сообщение
cin >> str;
имеет право на такое написание
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
17.06.2019, 02:06
Цитата Сообщение от повар1 Посмотреть сообщение
имеет право на такое написание
считываться из строки будет только первое слово, программа только по нему отработает, а не по всей строке
Цитата Сообщение от повар1 Посмотреть сообщение
ну ни в какие ворота
работает кстати нормально, но соглашусь что наверное так делать не следует. подправил:
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
#include <iostream>
#include <string>
using namespace std;
 
int main()
{     
    string s;
    cout << "String:\n";
    getline(cin, s);
    
    size_t size=s.size(), count, max=0; 
    char number='0';
    for(char i='0'; i<='9'; i++)
    {
      count=0;    
      for(size_t j=0; j<size; j++)
            if(i==s[j]) count++;
 
    if(count>max) {max=count;number=i;}   
    }
    
    cout << number << "\n";
    
  system("pause");
  return 0;
}
Цитата Сообщение от повар1 Посмотреть сообщение
Значение слова Строка по Ожегову
к чему эта цитата, что Вы хотели этим сказать ?
0
168 / 146 / 32
Регистрация: 03.09.2018
Сообщений: 499
17.06.2019, 03:18
Называется - забытый древний стайл.

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
#include <iostream>
 
#include <ctype.h>
#include <stdio.h>
int main(void)
{
    int i = -1;
    int r = -1;
    char ch;
    char sch;
    char ssch;
    int is = 0;
while(isdigit(ch = getchar())) {
    if(ch == sch) i++; else is = 1;
    if(r < i) {
        r = i;
        ssch = sch;
    }
    if (is == 1) {
        sch = ch;
        i = 1;
        is = 0;
    }
}
 
printf("%c is a digit\n", ssch);
return 0;
}
Добавлено через 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
#include <iostream>
 
#include <ctype.h>
#include <stdio.h>
int main(void)
{
    int CountCurrentChar = -1;
    int OldCount = -1;
    char CurrentChar, PrevChar, SaveChar;
    int is = 0;
while(isdigit(CurrentChar = getchar())) {
    if(CurrentChar == PrevChar) CountCurrentChar++; else is = 1;
    if(OldCount < CountCurrentChar) {
        OldCount = CountCurrentChar;
        SaveChar = PrevChar;
    }
    if (is == 1) {
        PrevChar = CurrentChar;
        CountCurrentChar = 1;
        is = 0;
    }
}
 
printf("%c out\n", SaveChar);
return 0;
}
0
0 / 0 / 0
Регистрация: 16.06.2019
Сообщений: 4
Записей в блоге: 1
18.06.2019, 19:10  [ТС]
Yetty, Видите ли, ваш код работоспособен, но, Если ввести комбинацию 33331111, то выведет цифру 1, как первую встретившуюся, а должно выводиться 3.
0
0 / 0 / 0
Регистрация: 16.06.2019
Сообщений: 4
Записей в блоге: 1
18.06.2019, 19:35  [ТС]
Повар1, вот какая беда, должно выводиться число 4
Миниатюры
Среди цифр введённой строки распечатать ту, которая встречалась чаще других  
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
18.06.2019, 21:14
Лучший ответ Сообщение было отмечено Alekson4ik как решение

Решение

Alekson4ik, спасибо за замечание, вот так должен работать как полагается:
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
#include <iostream>
#include <string>
using namespace std;
 
int main()
{     
    string s, s1;
    cout << "String:\n";
    getline(cin, s);
    
    size_t size=s.size(), count, max=0;
    for(char i='0'; i<='9'; i++)
    {
      count=0;    
      for(size_t j=0; j<size; j++)
            if(i==s[j]) count++;
 
    if(count>max) max=count;  
    }
    
    for(char i='0'; i<='9'; i++)
    {
      count=0;    
      for(size_t j=0; j<size; j++)
            if(i==s[j]) count++;
 
    if(count==max) s1+=i;   
    }     
    
    cout << s[s.find_first_of(s1)] << "\n";
    
  system("pause");
  return 0;
}
1
168 / 146 / 32
Регистрация: 03.09.2018
Сообщений: 499
18.06.2019, 23:10
Alekson4ik, Чем не устроил этот код?


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
#include <iostream>
 
#include <ctype.h>
#include <stdio.h>
int main(void)
{
    int CountCurrentChar = -1;
    int OldCount = -1;
    char CurrentChar, PrevChar, SaveChar;
    int is = 0;
while(isdigit(CurrentChar = getchar())) {
    if(CurrentChar == PrevChar) CountCurrentChar++; else is = 1;
    if(OldCount < CountCurrentChar) {
        OldCount = CountCurrentChar;
        SaveChar = PrevChar;
    }
    if (is == 1) {
        PrevChar = CurrentChar;
        CountCurrentChar = 1;
        is = 0;
    }
}
 
printf("%c out\n", SaveChar);
return 0;
}
Добавлено через 1 минуту
Тут один цикл, и тот - для того, что бы перебрать по порядку все символы вводимые.

В других примерах как минимум по 3 цикла. Это больше нагрузка, больше времени выполнения. Код сложнее, более запутаннее
0
0 / 0 / 0
Регистрация: 16.06.2019
Сообщений: 4
Записей в блоге: 1
19.06.2019, 07:55  [ТС]
Уважаемый Именч, я ничего против вашего кода, конечно же, не имею. ВУЗовская программа требует использовать те функции, которые были пройдены в течение курса.
Спасибо вам.
0
168 / 146 / 32
Регистрация: 03.09.2018
Сообщений: 499
20.06.2019, 16:03
Цитата Сообщение от Alekson4ik Посмотреть сообщение
которые были пройдены в течение курса
getchar и isdigit это основы языка
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.06.2019, 16:03
Помогаю со студенческими работами здесь

Среди цифр введенной строки распечатать ту, которая появлялась чаще других
помогите кто нибудь а то комп не работает, и какую книгу по си можно взять чтобы было написано простым языком 1..Среди цифр введенной...

Среди цифр введенной строки распечатать ту, которая появлялась чаще других
Задача: Среди цифр введенной строки распечатать ту, которая появлялась чаще других. Если таких цифр было несколько, распечатать ту, что...

Среди цифр введенной строки вывести на экран ту которая встречалась чаще всего
Среди цифр введенной строки вывести на экран ту которая встречалась чаще всего, если таких цифр несколько, то вывести ту которая попалась...

Среди цифр введенной строки вывести ту, которая встречается чаще других.
Среди цифр введенной строки вывести то, которое встречается чаще других. Если таких цифр несколько, вывести их все. Помогите...

Среди цифр введенных в строке вывести ту цифру которая встречается чаще других
Среди цифр введнных в строке вывести ту цифру которая встречается чаще других, если таких цифр несколько то вывести ту, которая ...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru