Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 05.09.2020
Сообщений: 10

Удаление повторяющихся цифр в числе

18.09.2022, 22:54. Показов 3959. Ответов 47
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, господа программисты, помогите, пожалуйста, решить задачу. Условие: дано число n, необходимо удалить ПОСЛЕДУЮЩИЕ повторяющиеся цифры в числе. Пример: 212345 -> 21345, 456678 -> 45678. В задаче нельзя использовать строки.
Заранее спасибо за помощь!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.09.2022, 22:54
Ответы с готовыми решениями:

Найти количество повторяющихся цифр в числе
Вводится натуральное число. Нужно вывести кол-во повторяющихся чисел в нем. Решить нужно 2-мя способами. С циклом постусловия, и...

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

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

47
 Аватар для Наталья8
625 / 383 / 67
Регистрация: 09.03.2016
Сообщений: 4,296
06.10.2022, 00:18
Студворк — интернет-сервис помощи студентам
Я не вникал.. У него какая то вложенность хитрая.
Не надо так писать, если можно гораздо проще.

Добавлено через 1 минуту
Код должен быть читабельным.
1
0 / 0 / 0
Регистрация: 05.09.2020
Сообщений: 10
06.10.2022, 00:20  [ТС]
Наталья8, это, конечно, так. Однако программа работает почти максимально корректно) Как вариант хотелось бы знать его идею.
0
 Аватар для Наталья8
625 / 383 / 67
Регистрация: 09.03.2016
Сообщений: 4,296
06.10.2022, 00:56
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
// При вызове функции --- флаг или ноль, или один
// 
size_t reverse_num(size_t number, int flag)
{
    size_t result = 0;
    int arr[10] = { 0 };// Похоже на массив флагов
for (; number; number /= 10)// Проход по цифрам числа
 
// Если флаг единица, работает только первое условие || если ноль, то (++arr[number % 10] == 1)
    if (flag || !flag && (++arr[number % 10] == 1))
        result = result * 10 + number % 10;
    return result;
}
 
//-----------------------------------------
int main()
{
    size_t number= 12524;
// И того функция вызываеться два раза. с нулём и единицей (дальше вьехать трудно)
    printf("result: %u\n", reverse_num(reverse_num(number, 1), 0));
        
        Sleep(10000);
    return 0;
}
0
 Аватар для Наталья8
625 / 383 / 67
Регистрация: 09.03.2016
Сообщений: 4,296
06.10.2022, 01:03
Название: NewPicture16.png
Просмотров: 55

Размер: 10.6 Кб

C++
1
2
3
4
5
6
7
// Если флаг единица, работает только первое условие || если ноль, то (++arr[number % 10] == 1)
    if (flag || !flag && (++arr[number % 10] == 1))
        result = result * 10 + number % 10;
    
    printf(" ---> %d \n", result);//< =============
    return result;
}
Первым проходом он число переворачивает (с флагом единицей))
Не стесняйся подставлять оператор вывода на экран и смотреть результат.
0
 Аватар для Наталья8
625 / 383 / 67
Регистрация: 09.03.2016
Сообщений: 4,296
06.10.2022, 01:12
++arr[number % 10] == 1
Это проверка на единицу... А как он единицы расставляет, не понял...

Добавлено через 1 минуту
Проверяет ли он второе условие первым проходом?
0
 Аватар для Наталья8
625 / 383 / 67
Регистрация: 09.03.2016
Сообщений: 4,296
06.10.2022, 01:21

Первым проходом не расставляет ни чего..
второе условие первым проходом не проверяет.

C++
1
2
3
4
5
6
7
8
9
10
11
// Если флаг единица, работает только первое условие || если ноль, то (++arr[number % 10] == 1)
    {
        if (flag || !flag && (++arr[number % 10] == 1))
            result = result * 10 + number % 10;
    
for (int q = 0; q < 10; ++q)printf("%d", arr[q]);
        printf(" ");
    }
printf(" ---> %d \n", result);
    return result;
}
Я смотрю массив флагов....
0
 Аватар для Наталья8
625 / 383 / 67
Регистрация: 09.03.2016
Сообщений: 4,296
06.10.2022, 01:32
------------------------------
Не понял, где он присваивает массиву значения....

Добавлено через 8 минут
(++arr[number % 10] == 1)
Дошло... Он его инкреминирует(два плюсика)..........
1
 Аватар для analogov net
2532 / 1130 / 495
Регистрация: 17.11.2018
Сообщений: 2,840
09.10.2022, 15:43
Лучший ответ Сообщение было отмечено Vladimir7791 как решение

Решение

Цитата Сообщение от Vladimir7791 Посмотреть сообщение
что делает переменная flag.
Vladimir7791, так Наталья8 уже всё разложил по полочкам.
Я сейчас в отпуске, к компу подхожу редко, по этому писал, практически, на коленке... Просто думал объединить две функции в одну, потому что они очень похожи между собой, за не большим исключением. Но сразу потестировать не получилось, а потом уже не было времени. Но Наталья8 помог в этом плане, за что ему спасибо...
Цитата Сообщение от Наталья8 Посмотреть сообщение
Код должен быть читабельным.
Согласен.
По-этому, что бы не тратить время, решил не много упростить. Хотя времени потестить, по-прежнему, нет...
Vladimir7791, попробуй так:
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
int main()
{
    size_t number = 0, reverse_number = 0;
    int arr[10] = {0};
 
    printf( "number: " );
 
    if( scanf( "%zu", &number ) == 1 && number )
    {
        int last_digit = ( number % 10 );
 
        for( ; number; number /= 10 )
            reverse_number = reverse_number * 10 + number % 10;
 
        for( number = 0; reverse_number; reverse_number /= 10 )
            if( ++arr[reverse_number % 10] == 1 )
                number = number * 10 + reverse_number % 10;
 
        if( last_digit == 0 && arr[0] == 0 )
            number *= 10;
 
        printf( "result: %zu\n", number );
    }
 
    return 0;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.10.2022, 15:43

Вывести число в степени, количество цифр в числе, суммы нечетных цифр в числе
Написать программу которая при запуске выводит на экран меню след вида : 1. Возведение числа в степень 2. Вычисление количества цифр в...

Узнать кол-во цифр в числе+ встречаются ли они в заданном числе?
Для заданного натурального числа n вывести количество цифр его десятичной записи и встречается в его записи задана пользователем...

Определение цифр в числе,нахождение предпоследней цифры в числе
#include &quot;stdafx.h&quot; #include &lt;math.h&gt; #include &lt;locale.h&gt; int main() { setlocale(LC_ALL, &quot;RUS&quot;); int n, b, c = 0; ...

Определение цифр в числе,нахождение предпоследней цифры в числе
Дано натуральное число n(10&lt;=n&lt;=10000).Определить, сколько цифр в числе и найти предпоследнюю цифру.

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


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

Или воспользуйтесь поиском по форуму:
48
Ответ Создать тему
Новые блоги и статьи
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml, в чате форсили функторы модулей как суперфичу. Пытаясь отдуплить концепт, наткнулся на тутор с простым примером. А главный принцип обучения от. . .
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru