shankar077 Ответов: 1

Найдите минимальное количество магических чисел, чтобы получить сумму


Существуют магические числа, состоящие только из 1 и 0, такие как 0, 1, 10, 11, 100, 101, 110, 111..... и так далее. Это целочисленные значения, а не двоичные.

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

например: 23 : 11 + 11+ 1 ( 3 магические числа)
120: 110+ 10 (2 магических числа)
Какая может быть логика, чтобы найти минимальные магические числа, необходимые для вычисления суммы?

Что я уже пробовал:

хитрость здесь заключается в том,чтобы получить максимальную цифру в значении, например: для 23 минимальное магическое число будет равно 3, а для 120-2, для 651-6.

Я пытаюсь реализовать / закодировать логику, чтобы найти комбинацию магических чисел, необходимых для получения суммы, но я не уверен, как продолжить работу с кодом.
Логика изложена ниже:
Шаг 1: получите длину значения.
Шаг 2: разделите значение на 10 и получите модуль. Если остаток равен 0, то единичная цифра магического числа будет равна 0 или если ее больше 0, то единичная цифра будет равна 1. но как заполнить позицию десятки или сотни???
я столкнулся с трудностями, чтобы закодировать его. любая помощь оценена по достоинству

1 Ответов

Рейтинг:
0

OriginalGriff

Если вы возьмете число-например, 1234 - и возьмете на нем скромную десятку:

1234 % 10 = 4

Если вы затем целое число делите исходное число на десять и берете модуль этого числа:
1234 / 10 = 123
123 % 10 = 3
Это, как вы можете видеть, цифра "десятки". Повторение операций дает вам сотни:
123 / 10 = 12
12 % 10 = 2
И так далее.


shankar077

Это прекрасно @OriginalGriff, но все же я не могу закодировать его ... извините за то, что я такой тупой

OriginalGriff

Какую его часть вы не можете закодировать?
Вы знаете, как написать цикл, вы знаете, как получить модуль, вы знаете, как разделить целые числа. Я предполагаю, что вы можете написать оператор if, так что же из этого вам трудно?

shankar077

как сгенерировать магическое число? предположим, 120%10, я знаю, что единичное место равно 0, но как мне заполнить позицию десяти и ста?

OriginalGriff

Давайте начнем с самого начала, мы должны...
Вам нужно найти самую большую цифру, да?
Так что же вам для этого нужно? (Это не вопрос с подвохом)
Ответ: посмотрите на каждую цифру в отдельности и найдите наибольшее значение.
Так... тебе нужна петля. Можете ли вы сами написать внешнюю часть цикла? (Подсказка: вы хотите цикл * while* )

shankar077

Это очень просто.
int largest=0;
int no=546;
в то время как (нет > 0) {
если (нет % 10 > наибольший) {
самый большой = нет % 10;
}
нет = нет / 10;
}

OriginalGriff

Ура!
Так... у вас есть самая большая цифра, когда цикл закончен.
А это значит, что вы знаете минимальное магическое число...

shankar077

Спасибо @OriginalGriff, но это только одна часть вопроса.. Вторая половина мне нужна-это список магических чисел :). например, для 120 набор магических чисел равен 110 и 10.

OriginalGriff

Так что же вы пробовали?
Помните, это ваше домашнее задание, а не наше - вам придется его сделать. Время от времени мы будем давать пинки в разные стороны, но работа ваша, а не наша.
Как бы вы сделали это вручную?

shankar077

ну, я проверю цифру единиц суммы, если она равна 0, то максимальное магическое число, которое меньше суммы, закончится на 0, иначе закончится на 1.
например: 120: единица измерения равна 0, следовательно, максимальное магическое число меньше 120 равно 110

второй шаг-это вычесть 110 из 120, а затем повторить первый шаг для остаточной стоимости.

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

OriginalGriff

Вы застряли на написании x-y в цикле?
Ну же! Ты же знаешь, что это не так!