Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Разложить число. (http://www.flasher.ru/forum/showthread.php?t=195046)

pivnoibaron 27.02.2013 16:00

Разложить число.
 
Привет. Дали тестовое задание. Но не пойму по какому принципу разложить надо. Как разложить число используя номиналы, точнее что делать то, умножать что то или как? Может кто знает.

---------------------------------------------------------------------------------------------------------------
Разложить число, используя монеты заданных номиналов, на N монет. Сделать интерфейс, в
котором можно будет устанавливать число, номиналы и N.
Визуализировать результат выполнения программы в виде стопки монет/фишек.

Минимальные требования:
- программа должна быть написана на ActionScript 3.0

Плюсами будет:
- программа сделана на AIR и запускается на iOS
- программа написана на haxe, с использованием фреймворка NME

===========================================
Пример

Дано:
номиналы = [0.01, 0.1, 0.25, 0.5, 1, 5]
число = 2.53
N=7

Ответом будет: [1, 0.5, 0.5, 0.5, 0.01, 0.01, 0.01]
------------------------------------------------------

AlexCooper 27.02.2013 16:07

Ух... мне бы в такой универ) Я ActionScript изучал на факультативе

Добавлено через 3 минуты
А имеется ввиду, что у вас номиналы: 1, 2, 5, 10, 25 и 50копеек. А нужно к примеру на входе ввести 123 разложить на 10 монет, программа должна подобрать комбинацию из 10 монет чтобы в сумме они давали 123 копейки.

alatar 27.02.2013 16:12

Ошибка в ответе, номинала 1 нет.

Добавлено через 4 минуты
Цитата:

Сообщение от AlexCooper (Сообщение 1122667)
Ух... мне бы в такой универ) Я ActionScript изучал на факультативе

Не думаю, что это задание из универа. Больше похоже на тестовое задание при приеме на работу.

iflamberg 27.02.2013 16:19

Цитата:

Ошибка в ответе, номинала 1 нет.
Цитата:

[0.01, 0.1, 0.25, 0.5, 1, 5]
Really?

alatar 27.02.2013 16:21

Прочитал как 1,5 :)

КорДум 27.02.2013 16:21

Алгоритм "в лоб" предельно прост. Пускаем бесконечный цикл, пока оставшаяся сумма не станет равной 0. Вычитаем из нее каждый шаг самый большой номинал. Если сумма получилась отрицательной, то берем следующий номинал поменьше. Как только стала положительной, сохраняем остаток в переменную, где у нас была первоначальная сумма и идем на новую итерацию.

Что-то типа того (не окончательный вариант без кэширования) выглядит так:
Код AS3:

while (sum > 0) {
    for (var i:uint = 0; i < nominalList.length; i++) {
        if ((sum - nominalList[i]) >= 0) {
            sum -= nominalList[i];
            resultList.push(nominalList[i]);
            break;
        }
    }
}


alatar 27.02.2013 16:23

https://www.youtube.com/watch?v=O28YpB4fo18

КорДум 27.02.2013 16:23

А, да, номиналы в массиве номиналов должны идти от большего к меньшему. В моем варианте. Иначе всего лишь нужно поменять направление цикла.

Hauts 27.02.2013 16:28

Именно такую задачу как-то решал на работе. Реализацию поищу :)

pivnoibaron 27.02.2013 16:28

спасибо


Часовой пояс GMT +4, время: 23:38.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.