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

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

27.10.2018, 23:16. Показов 2072. Ответов 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,984
Записей в блоге: 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,984
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru