Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
3 / 4 / 1
Регистрация: 12.11.2015
Сообщений: 77
1

Удалить в записи числа цифру, повторяющуюся максимальное число раз

27.09.2016, 22:46. Просмотров 704. Ответов 5
Метки нет (Все метки)

Удаляет в записи числа цифру, повторяющуюся максимальное число раз, получая новое число;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.09.2016, 22:46
Ответы с готовыми решениями:

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

Дано четырехзначное натуральное число. Удалить из записи этого числа все чётные цифры и цифру 0
Дано четырехзначное натуральное число. Удалить из записи этого числа все чётные цифры и цифру 0. ...

В числе удалить повторяющуюся цифру
Нужно в числе удалить повторяющуюся цифру. Помогите найти ошибку в функции: for(j=0;j<k;j++) //к -...

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

5
Объявлятель переменных
962 / 284 / 283
Регистрация: 24.09.2011
Сообщений: 1,042
27.09.2016, 22:55 2
Если цифры встречаются одинаковое количество раз, то что удалять?
0
59 / 59 / 53
Регистрация: 05.05.2013
Сообщений: 150
27.09.2016, 23:56 3
Наверное не самый хороший код:
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
#include <iostream>
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"rus");
    int a;
    std::cin >> a;
    int temp = a;
    int ar[10] = {0};
    while (temp >= 1)
    {//считаем сумму одинаковых цифр и заносим его в соответствующую ячейку массива 
        ar[temp % 10]++;
        temp /= 10;
    }
    int b;
    int n = ar[0];
    for (int i = 0; i < 10; i++)
    {//находим в массиве самый распространненую цифру 
        if (ar[i] > n) 
        {
            n = ar[i]; 
            b = i;
        }
    }
    int i_new = 0;
    int k = 1;
    temp = a;
    while (temp >= 1)
    {//делаем новое число
        temp = a % 10;
        if (temp != b)
        {
            i_new = i_new + temp*k;
            k *= 10;
        }
        a /= 10;
    }
 
    std::cout << "\nНовое число: " << i_new;
    std::cin.get();
    return 0;
}
Находит и удаляет только одно максимально повторяющееся число.
Если таких чисел поровну, например три 1 и три 5 то удалит только единицы.
0
8 / 8 / 6
Регистрация: 05.10.2015
Сообщений: 20
28.09.2016, 00:15 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
46
47
48
49
#include <iostream>
#include <string>
#include <algorithm>
 
int main()
{
    int i=0;
    int maxcount = 1;
    char chToDel;
 
    std::cin >> i;
    std::string str = std::to_string(i);
    std::string alreadyChek;
 
    for( auto const& i : str)
    {
        if(alreadyChek.empty() || alreadyChek.find(i) != std::string::npos)
        {
            int count = std::count(str.begin(),str.end(),i);
            alreadyChek.push_back(i);
 
            if(count > maxcount)
            {
                maxcount = count;
                chToDel = i;
            }
            else if(count == maxcount)
            {
                maxcount = 1;
                chToDel = ' ';
            }
        }
    }
 
    std::string result;
 
    for( auto & i : str)
    {
        if(i != chToDel)
        {
            result.push_back(i);
        }
    }
 
    int answer = std::stoi(result);
    std::cout << answer << '\n';
 
    return 0;
}
0
89 / 87 / 33
Регистрация: 20.07.2016
Сообщений: 372
28.09.2016, 00:52 5
Punya, программу то проверяли? тестили?

Цитата Сообщение от Punya Посмотреть сообщение
C++
1
if(alreadyChek.empty() || alreadyChek.find(i) != std::string::npos)
тут все в порядке? так и задумано?

Добавлено через 24 минуты
Punya, ваша же программа, исправленная и работающая корректно:
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
49
50
51
#include <iostream>
#include <string>
#include <algorithm>
 
//================================================================================
int main ()
{
    int iNumb;
    if (!(std::cin >> iNumb) || 
        !(iNumb / 10))
    {
        std::cout << "Bad input" << std::endl;
        return 1;
    }
 
    std::string strNumb = std::to_string(iNumb),
                strTemp;
    int iMaxCnt = 1;
    char chForDelete = '\0';
 
    for (const auto& j : strNumb)
    {
        if (std::find(strTemp.cbegin(), strTemp.cend(), j) ==
            strTemp.cend())
        {
            strTemp.push_back(j);
            int iCnt = std::count(strNumb.cbegin(), strNumb.cend(), j);
            if (iMaxCnt < iCnt)
            {
                iMaxCnt = iCnt;
                chForDelete = j;
            }
            else if (iMaxCnt == iCnt)
                iMaxCnt = 1;
        }
    }
 
    if (iMaxCnt != 1)
    {
        std::string result;
        for (const auto& j : strNumb)
            if (j != chForDelete)
                result.push_back(j);
 
        std::cout << "\nResult: " << std::stoi(result) << std::endl;
    }
    else
        std::cout << "Several numbers for delete" << std::endl;
 
    return 0;
}
0
8 / 8 / 6
Регистрация: 05.10.2015
Сообщений: 20
28.09.2016, 02:27 6
Цитата Сообщение от JIawliet Посмотреть сообщение
тут все в порядке? так и задумано?
Практически так, только чуть-чуть наоборот )))
C++
1
if(alreadyChek.empty() || alreadyChek.find(i) == std::string::npos)
Если только начали или новая буква еще не занесена в строку проверенного, значит считаем. Так почти все работает.
Не хватает в конце проверки не пустая ли строка результата, если на входе дать 111, например, на выходе прилетает исключение от stoi
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.09.2016, 02:27

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Из натурального трехзначного числа удалить заданную цифру. Число и цифру вводить с клавиатуры
Из натурального трехзначного числа удалить заданную цифру. Число и цифру вводить с клавиатуры.

В которое двузначное число и какую цифру надо вставить посередине записи, чтобы полученное число было в 6 раз больше чем исходное?
В которое двузначное число и какую цифру надо вставить посередине записи, чтобы полученное число...

Удалить k-ую цифру из записи числа
Дано натуральное число n. Удалить k-ую цифру из записи числа n.

Удалить из записи натурального числа n вторую цифру
Дано натуральное число n. Удалить из записи вторую цифру.


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

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

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