Показать сообщение отдельно
Старый 28.02.2013, 15:03
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 38  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Весело у вас тут))
Код 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;
		}
	}
}
__________________
Reality.getBounds(this);