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

Задача на поиск числа

27.10.2018, 23:16. Показов 2092. Ответов 9

Студворк — интернет-сервис помощи студентам
Нужно найти число меньше или равно данному, в которого произведение всех цифр будет максимальное.
Пример: для 16 будет 9 (ибо 1*6=6, а у 9=9), для 27 = 14, для 50 = 36(4*9=36), для 5010=(4*9*9*9)...
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
#include <iostream>
 
using namespace std;
 
int main()
{
    int n,i;
    int res[i],num[n];
    cout<<"Enter number = ";
    cin>> num[n];
if(num[n]!=0)
{
for(res[i] = 1; num[n];num[n]/=10) // цикл, который перебирает по одной цифре в числе и умножает их(работает)
{
res[i]*=num[n]%10;
}
}  
if(res[i]=0) 
        {
           res[i]=(num[0]-1)*(9*(n-3)); //если результат = 0, то должна работать эта формула, но она выводит неверное значение
        }
    cout<<"res = "<< res[i] << endl;
    return 0;
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.10.2018, 23:16
Ответы с готовыми решениями:

Задача на массив и поиск числа
Помогите пожалуйста с следующей задачей В массиве целых чисел,расположенном в файле(кол-во чисел в фале произв-ое) найти все...

Задача на поиск числа среди введеных
Вводим числа k,l,m - среди этих чисел вводятся два одинаковых, а третье является отличным от них. Необходимо переменной n присвоить...

Задача на поиск минимального\максимального числа
Здравствуйте. Начал учить с++ относительно недавно. Решал задачу на поиск максимального и минимального числа. Вот решение: /*Дано...

9
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
28.10.2018, 11:36
ReeZox, Код написан безо всякого понятия. n - не определено. Соответственно, никто не знает, что такое массив num[n]. Но даже если n определить где-то, элемент num[n] находится вне массива. (последний элемент имеет индекс n-1)
Да и вообще в этой задаче никакие массивы не нужны.
Совет. Перечитайте основы. Выбросьте свой код. И попробуйте написать его заново, уже вооруженные новым знанием.

Добавлено через 1 минуту
ReeZox, Еще рекомендую научиться ставить теги кода. Код будет выглядеть много симпатичнее. Рассказать, как?
0
0 / 0 / 0
Регистрация: 27.10.2018
Сообщений: 3
28.10.2018, 20:26  [ТС]
Я просто не знаю как выделить из числа первую цифру без массивов. Не против научиться.

Добавлено через 5 минут
num[n]-это вводимое число.
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
28.10.2018, 21:39
Цитата Сообщение от ReeZox Посмотреть сообщение
num[n]-это вводимое число.
Енто чушь, батенька!
Так с чего начнем? С повторения вами азов языка? Или вам кровь из носу нужен код? Энто тоже можно. Но он будет совсем не похож на ваш. Ибо, простите, ваш код - бред сивой кобылы в лунную майскую ночь.
Цитата Сообщение от ReeZox Посмотреть сообщение
Не против научиться.
Теги ставить? Легко. Есть 2 варианта
1. Перед кодом пишите [CPP]. После кода - [/CPP]
2. Для ленивых. Выделяете код мышкой. Потом щелкаете по иконке кода (второй во втором ряду)
1
0 / 0 / 0
Регистрация: 27.10.2018
Сообщений: 3
30.10.2018, 00:08  [ТС]
Код сейчас не печёт, но я хотел бы увидеть адекватное решение. Я уже приступил к повторению нужных тем. Есть хорошая программка под рукой)
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
30.10.2018, 00:23
Цитата Сообщение от ReeZox Посмотреть сообщение
Я уже приступил к повторению нужных тем.
Атлично! Вот тогда, если вы, конечно, не против, поговорим...

Добавлено через 3 минуты
Чтобы вам было на что опереться, я начну
C++
1
2
3
4
5
6
int main()
{
int n,i;
cout<<"Enter number = ";
cin>> n;
...
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
30.10.2018, 23:50
Лучший ответ Сообщение было отмечено ReeZox как решение

Решение

Цитата Сообщение от Байт Посмотреть сообщение
Энто тоже можно. Но он будет совсем не похож на ваш.
C++
1
2
3
4
int f(int n) { return n ? n%10 * f(n/10) : 1; }
int g(int n) { return n>9 ? 9 * g(n/10) : max(1, n-1); }
 
int main() { int n; cin >> n; cout << max(f(n), g(n)); }
1
309 / 221 / 74
Регистрация: 23.05.2011
Сообщений: 981
31.10.2018, 03:11
_Ivana, Ваш вариант некорректно работает при n = 25.
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
31.10.2018, 03:23
Почему же некорректно? 10 выдает, как и положено. Просто в стартовом посте некая нестыковка - в условии требуется найти само число, а в примере ответов дано произведение его цифр, что у меня и выводится.
0
309 / 221 / 74
Регистрация: 23.05.2011
Сообщений: 981
31.10.2018, 12:48
_Ivana, так верный ответ же 25.
Я смотрю на условие, а не на ту ерунду, что после него.

ReeZox, написал два варианта.
Вариант with_max_digit_mult работает на моём компьютере в 240 раз быстрее.
Кликните здесь для просмотра всего текста

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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <iostream>
#include <tuple>
 
static unsigned digit_count(unsigned n)
{
    unsigned r = 0;
    while (n)
    {
        ++r;
        n /= 10;
    }
    return r;
}
 
unsigned ten_pow(const unsigned digits)
{
    unsigned r = 1;
    for (unsigned i = 1; i < digits; ++i)
        r *= 10;
    return r;
}
 
static std::pair<unsigned, unsigned long long> with_max_dig_mult_res(unsigned n, unsigned pow,
                                                                     unsigned long long nine_mult)
{
    // Если одна цифра в числе, ответ понятен
    if (n < 10)
        return std::make_pair(n, 1ull * n);
    // Сохраняем первую цифру и пытаемся получить изменяя хвост
    std::pair<unsigned, unsigned long long> first = with_max_dig_mult_res(n % pow, pow / 10, nine_mult / 9);
    first.first += n - n % pow;
    first.second *= (n >= pow) > 0 ? n / pow : 1;
    // Уменьшаем первое число на 1, остальные заменяем на 9
    std::pair<unsigned, unsigned long long> second = std::make_pair(pow - 1, nine_mult / 9);
    second.first += n - n % pow - pow;
    second.second *= (n > pow + pow) ? (n / pow - 1) : 1;
    if (first.second > second.second)
        return first;
    else
        return second;
}
 
unsigned with_max_digit_mult(unsigned n)
{
    const unsigned digits = digit_count(n);
    const unsigned ten_n = ten_pow(digits);
    unsigned long long nine_mult = 1;
    for (unsigned i = 0; i < digits; ++i)
        nine_mult *= 9;
    std::pair<unsigned, unsigned long long> res = with_max_dig_mult_res(n, ten_n, nine_mult);
    return res.first;
}
 
unsigned long long digit_mult(unsigned n)
{
    unsigned long long r = 1;
    do
    {
        r *= n % 10;
        n /= 10;
    }
    while (r && n);
    return r;
}
 
unsigned stupid_calc(const unsigned n)
{
    unsigned res = n;
    unsigned long long mx = digit_mult(n);
    for(unsigned i = n;i && n/i<10;--i)
    {
        unsigned long long t = digit_mult(i);
        if(t>mx)
        {
            mx = t;
            res = i;
        }
    }
    return res;
}
 
int main()
{
    for(unsigned i = 0; i < 10000; ++i)
    {
        const unsigned smart = with_max_digit_mult(i);
        const unsigned stupid = stupid_calc(i);
        if (digit_mult(smart) != digit_mult(stupid) || smart > i || stupid > i)
            std::cout << i << ": " << smart << " " << stupid << std::endl;
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.10.2018, 12:48
Помогаю со студенческими работами здесь

Задача на поиск числа
Ввести 4 числа. Найти число в котором количество различных цифр минимально.

Задача на поиск ближайшего меньшего Палиндрома от long числа
Тема стала модной!?:D Народ, кому не лень, прошу протестить задачу на предмет ошибок в ответе, т.е. ввел число - получил ошибочный...

Поиск числа в двумерном массиве (бинарный поиск)
Произвожу поиск элемента в массиве двумя способами: линейным(последовательным) поиском и бинарным(двоичным). Первый работает на ура. Второй...

Задача:Даны числа N и K, найти разбиение числа N на K слагаемых(без повторений)
Помогите решить задачу самыми простыми способами, без сложных операторов и библиотек.

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru