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

"Вычеркнуть" 5 цифр из числа так, чтобы число стало наименьшим

01.02.2015, 19:38. Показов 8958. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте дорогие форумчане! Я впервые у вас на форуме, прошу простить если будут какие-то погрешности.

Задача: Вводится 9-ти значное число без повтора цифр (например: 123456789). Нужно "вычеркнуть" 5 цифр так, чтобы число стало наименьшим из всех возможных.

Нигде не смог найти подобную задачу. Заранее спасибо.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.02.2015, 19:38
Ответы с готовыми решениями:

Проверить,можно ли из шестеричной записи числа (x) отбросить несколько первых цифр так,чтобы оно стало простым
ПРОСТОЕ-делится только на самого себя и только на 1.

Какое минимальное количество цифр нужно вычеркнуть из N, чтобы оставшиеся число делилось на 3
Дано целое положительное число N. Какое минимальное количество цифр нужно вычеркнуть из N, чтобы оставшиеся число делилось на 3 без...

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

21
Dimension
595 / 463 / 223
Регистрация: 08.04.2014
Сообщений: 1,710
01.02.2015, 20:02
просто вычеркните наибольшие 5 цифр
0
3 / 0 / 0
Регистрация: 01.02.2015
Сообщений: 7
01.02.2015, 20:20  [ТС]
Dimension, Сначала так и сделал. Однако, когда уже тестил код, то увидел, что этот способ неправильный.
Взять например число 987432165, если вычеркнуть 5 наибольших цифр получим число 4321, однако можно получить ещё меньшее - 2165.
0
58 / 62 / 34
Регистрация: 14.03.2014
Сообщений: 933
01.02.2015, 20:24
Так вы их и выводите в порядке возрастания.
Вы возможно что то не учли, если цифры всегда все разные и вычеркивается 5 цифр то наименьшее будет 1234, или я не так понял?
0
Эксперт 1С
 Аватар для OverDozero
921 / 326 / 130
Регистрация: 07.04.2011
Сообщений: 1,731
01.02.2015, 20:31
Может стоит не искать 5 наибольших чисел,а найти 4 наименьших?И вывести по возрастанию?В вашем примере наименьшими будут 4,3,2,1 и вывести по возрастанию.
0
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
01.02.2015, 21:29
Цитата Сообщение от OverDozero Посмотреть сообщение
И вывести по возрастанию?В вашем примере наименьшими будут 4,3,2,1 и вывести по возрастанию.
Вы условия задачи не поняли. Цифры переставлять НЕЛЬЗЯ. Можно только ВЫЧЁРКИВАТЬ.

но, тем не менее, с общим направлением согласен. я бы искал решение в таком направлении: есть N цифр, нужно оставить N-5 цифр. Так вот, нужно искать минимальную цифру, такую, что за ней есть не менее чем (N-5)-1 цифра. от неё и плясать.
0
Guardian of Asgaard
377 / 319 / 197
Регистрация: 11.11.2013
Сообщений: 1,046
01.02.2015, 21:38
Цитата Сообщение от vishnevsky10 Посмотреть сообщение
Взять например число 987432165, если вычеркнуть 5 наибольших цифр получим число 4321, однако можно получить ещё меньшее - 2165.
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
int main() {
    int number;
    int remainder = 10000;
    
    std::cin >> number;
    
    std::cout << number % remainder << std::endl;
    
    return 0;
}
Code
1
2
3
4
5
stdin:
987432165
 
stdout:
2165
0
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
01.02.2015, 21:40
Boleon, что это за ужас?!

введите число 564172389 и сообщите, какое минимальное 4-х значное число может быть получено, с помощью вашего кода!

если что - это число 1238
0
Dimension
595 / 463 / 223
Регистрация: 08.04.2014
Сообщений: 1,710
01.02.2015, 21:53
Лучший ответ Сообщение было отмечено vishnevsky10 как решение

Решение

автор ,сам додумаешь как перенести цифры входного числа в массив "a",это легко.
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
int main()
{
    int a[11], b[11];
    int Min = 11,index=0;
        for (int i = 0; i < 9; i++){
        if (Min>a[i] && a[i] != 0 && (9 - i) >= 4)
        {
            Min = a[i];
            index = i;
        }
    }
    b[0] = Min;
    Min = 11;
    int e = 4;
    int w = 1;
    while (e--){
        for (int i = index + 1; i < 9; i++){
            if (Min>a[i] && (9 - i) >= e){
                Min = a[i];
                index = i;
            }
        }
        b[w] = Min;
        w++;
        Min = 11;
    }
    for (int i = 0; i < 4; i++)cout << b[i];
    return 0;
}
1
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
01.02.2015, 22:01
в цикле найти минимальную цифру
потом проверить есть ли за ней три числа
если есть вычеркиваем все до и после
например
912345678
минимальная 1
за ней есть три числа вычеркиваем 912345678
если нет то ищем другую минимальную
например
987654321
нашему условию будет удовлетворять 4
значит 987654321
не знаю понятно ли объеснил
но непонятно есть ли 0 в последовательности и что с ним сделать

Добавлено через 3 минуты
хотя нет
цифры то могут не подряд стоять
тогда так
1начиная с 4 позиции справа ищем минимальную цифру, запоминаем позицию
2 потом ищем с 3 позиции и до позиции из п1 минимальную цифру,запоминаем позицию
3 потом ищем с 2 позиции и до позиции из п2 минимальную цифру,запоминаем позицию
4 потом ищем с 1 позиции и до позиции из п3 минимальную цифру,запоминаем позицию
по позициям выводим число
2
Dimension
595 / 463 / 223
Регистрация: 08.04.2014
Сообщений: 1,710
01.02.2015, 22:01
Цитата Сообщение от ValeryS Посмотреть сообщение
но непонятно есть ли 0 в последовательности и что с ним сделать
отдельно рассмотреть этот случай в самом начале
0
Guardian of Asgaard
377 / 319 / 197
Регистрация: 11.11.2013
Сообщений: 1,046
01.02.2015, 23:48
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
#include <iostream>
 
int length(int value) {
    int size = 1;
    
    for ( ; value != 0; size += 1 ) {
        value /= 10;
    }
    
    return size;
}
 
void check(int value) {
    int size = length(value);
    int array[size];
    int counter = size - 5;
    int min = 0;
    
    for ( int i = 0; i <=counter; i++, value /= 10 ) {
        array[i] = value % 10000;
    }
    
    for ( int i = 0; i <= counter; i++ ) {
        if ( array[min] > array[i] ) {
            min = i;
        }
    }
    std::cout << array[min] << std::endl;
}
 
int main() {
    int number;
    
    std::cin >> number;
    
    check(number);
}
Code
1
2
3
123456789 => 1234
987432165 => 2165
564172389 => 1723
0
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
02.02.2015, 00:08
Цитата Сообщение от Boleon Посмотреть сообщение
564172389 => 1723
а разве число 1238 не меньше?
1
3 / 0 / 0
Регистрация: 01.02.2015
Сообщений: 7
02.02.2015, 00:38  [ТС]
Цитата Сообщение от Sergio Leone Посмотреть сообщение
Сообщение от Boleon
564172389 => 1723
а разве число 1238 не меньше?
Boleon, Sergio Leone прав, программа работает некорректно.

Добавлено через 1 минуту
Цитата Сообщение от ValeryS Посмотреть сообщение
тогда так
1начиная с 4 позиции справа ищем минимальную цифру, запоминаем позицию
2 потом ищем с 3 позиции и до позиции из п1 минимальную цифру,запоминаем позицию
3 потом ищем с 2 позиции и до позиции из п2 минимальную цифру,запоминаем позицию
4 потом ищем с 1 позиции и до позиции из п3 минимальную цифру,запоминаем позицию
по позициям выводим число
ValeryS, судя по всему, это и есть правильный алгоритм)

Добавлено через 21 минуту
Цитата Сообщение от Dimension Посмотреть сообщение
автор ,сам додумаешь как перенести цифры входного числа в массив "a",это легко.
Код C++
Dimension, похоже код рабочий. Огромное спасибо!
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,984
Записей в блоге: 32
02.02.2015, 00:59
Мой кот для этой задачи (я обещал модератору дельные посты ) - не нужны условия на 9-значность исходного числа и отсутствие повтора цифр:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void task (char *p, char *pm, int d)
{
    if (d==0) {cout << endl; return;}
    char *r = p, rmin = '9', *pe = pm-d+1;
    while (p<=pe) {if (*p<rmin) {r = p; rmin = *p;} p++;}
    cout << rmin;
    task (r+1, pm, d-1);
}
int _tmain(int argc, _TCHAR* argv[]) 
{
    unsigned long long int n; cout << "Input n: "; cin >> n;
    int k; cout << "Input amount of digits return k: "; cin >> k;
    char buf[50];
    cout << "Rezult = "; task (buf, buf + sprintf(buf, "%d", n) - 1, k);
    system("pause");
    return 0;
}
1
63 / 63 / 77
Регистрация: 22.11.2012
Сообщений: 241
Записей в блоге: 1
02.02.2015, 06:47
https://ru.wikipedia.org/wiki/... ательности
0
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
02.02.2015, 11:21
senich, и при чём здесь "УВЕЛИЧИВАЮЩАЯСЯ подпоследовательность" ?!
в данном случае и не увеличивающая и не подпоследовательность.

возьмите, например, число 564173829 и найдите нужное 4-х значное число после вычёркивания цифр.

Не по теме:

очень странно, что простые и очевидные условия данной задачи оказались многими непонятыми...
я не могу объяснить этот феномен!

0
3 / 0 / 0
Регистрация: 01.02.2015
Сообщений: 7
02.02.2015, 15:56  [ТС]
Цитата Сообщение от _Ivana Посмотреть сообщение
Мой кот для этой задачи (я обещал модератору дельные посты ) - не нужны условия на 9-значность исходного числа и отсутствие повтора цифр:
_Ivana, Спасибо за ваш код, однако, сомневаюсь, что я смогу убедить преподавателя в том, что я сам его написал
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,984
Записей в блоге: 32
02.02.2015, 15:59
vishnevsky10, редко кто на этом форуме задумывается о подобном Но тогда ситуация может быть интереснее - вы досконально разбираетесь в моем коте, понимаете его от начала и до конца и после этого внезапно обнаруживаете в себе способность писать подобное самостоятельно
0
1 / 0 / 1
Регистрация: 02.02.2015
Сообщений: 79
02.02.2015, 16:49
Очевидно же что надо просто по 4 цифры сгруппировывать и выбирать наименьшее в цикле, все комбинации переббрать. надо конечно поломать чуток голову ))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.02.2015, 16:49
Помогаю со студенческими работами здесь

В натуральном числе вычеркнуть цифру так, чтобы оставшееся число было как можно больше
Написать программу которая удаляет такую цифру из числа, что число было как можно больше

Вычеркнуть какую-либо цифру так, чтобы оставшееся число было как можно больше по значению.
В заданном натуральном числе с количеством цифр не более 10000 вычеркнуть какую-либо цифру так, чтобы оставшееся число было как можно...

Переставить цифры числа так, чтобы отобразить полное наименьшее число из этих же цифр
Дано натуральное число. Переставить его цифры так, чтобы отобразить полное наименьшее число из этих же цифр. Допустим дано 547931 ...

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

Требуется вычеркнуть минимально возможное количество чисел так, чтобы оставшиеся числа шли в порядке возрастания
27. Дана последовательность из N целых чисел, среди которых нет двух одинаковых. Требуется вычеркнуть минимально возможное количество чисел...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru