Re[2]: Помогите решить задачу!!!!!
От: Sergey A. Sablin Россия http://www.elecard.com
Дата: 23.10.06 13:12
Оценка:
Здравствуйте, Vintik_69, Вы писали:

V_>Здравствуйте, Аноним, Вы писали:


А>> ПОмогите пожалуйста ленивому студенту, завтра здавать идей нет.

А>> задача такая:
А>> имеем некоторое натуральное число N. среди всех положительных чисел, меньших или равных N, необходимо найти число с мавксимальным произведением цифр.
А>> входное N: 1<=N<=2*10 в 9 степени.


V_>Путь ответ — К. Пусть самая левая (то есть самая значимая) цифра, отличающаяся у N и K находится на i-м месте. Тогда все цифры левее i-й будут равны у N и K, i-я цифра K будет равна i-й цифре N минус 1, а все остальное будет равно 9. Перебираем все i и выбираем максимум.


не совсем так. допустим ваше число 9200, тогда судя по этому алгоритму получится 9 * 1 * 9 * 9 = 729, а правильный ответ 8 * 9 * 9 * 9 = 5832
т.е. алгоритм примерно такой (брут форс однако):

a = 1;
for (int k = 0; k < num_digits(N); k++)
{
  x[k] = a * (digit(N, k) - 1) * pow(9, num_digits(N) - 1 - k);
  a *= digit(N, k);
}
тут имееем num_digits(N) + 1 число (x[] и a) одно из которых и есть ответ :-)
Сергей.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.