
Код AS3:
package
{
import flash.display.Sprite;
import flash.events.Event;
/**
* ...
* @author wolsh
*/
public class Main extends Sprite
{
private var _coinsCount:uint = 7;
private var _nominals:Array = [0.01, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 50, 100, 500, 1000];
private var _summ:Number = 125.15;
private var _result:Array;
public function Main():void
{
_nominals = _nominals.sort(16);
while (_nominals[_nominals.length - 1] > _summ) _nominals.pop();
_result = new Array(_coinsCount);
for (var i:uint = 0; i < _coinsCount; i++)
{
_result[i] = _nominals[0];
}
count:for (var n:uint = 0; n < _coinsCount; n++)
{
nominal:for (var c:uint = 1; c < _nominals.length; c++)
{
_result[n] = _nominals[c];
if (summ(_result) < _summ)
{
continue nominal;
}
if (summ(_result) > _summ)
{
_result[n] = _nominals[c - 1];
continue count;
}
if (summ(_result) == _summ)
{
break count;
}
}
}
if(summ(_result) == _summ) trace("Получилось!", _result, "(", summ(_result), ")");
else trace("Близкий результат:", _result, "(", summ(_result), ")");
}
private function summ(array:Array):Number
{
var result:Number = 0;
for (var i:uint = 0; i < array.length; i++)
{
result += array[i];
}
return Math.round(result * 100) / 100;
}
}
}