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

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

16.06.2019, 11:49. Показов 2744. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru