2014-01-02 3 views
2

Я пытаюсь создать алгоритм ATM. Логика заключается в следующем Есть 3 Наименования 100,500,1000Создать ATM-алгоритм

Когда сумма 100 выход Print 1 100 Note

Когда сумма 500 выход Print 5 100 Note

Когда сумма 1000 выход Print 1 500 Note и Print 5 100 Note

Так Когда сумма 4500 вывод должен быть

3 1000 Note

2 500 Note

5 100 Note

Мой алгоритм выглядит следующим образом

int _remainingamt = _inputAmt/1000; 

     if (_remainingamt > 1) 
     { 
      _inputAmt = _inputAmt - (_remainingamt-1) * 1000; 
      Console.WriteLine("Print {0} 1000 Notes", _remainingamt - 1); 
     } 
     else 
     { 
      _inputAmt = _inputAmt - _remainingamt * 1000; 
      Console.WriteLine("Print {0} 1000 Notes", _remainingamt); 
     } 

     _remainingamt = _inputAmt/500; 
     if (_remainingamt > 1) 
     { 
      _inputAmt = _inputAmt - (_remainingamt - 1) * 500; 
      Console.WriteLine("Print {0} 500 Notes", _remainingamt - 1); 
     } 
     else 
     { 
      _inputAmt = _inputAmt - _remainingamt * 500; 
      Console.WriteLine("Print {0} 500 Notes", _remainingamt); 
     } 

     _remainingamt = _inputAmt/100; 
     _inputAmt = _inputAmt - _remainingamt*100; 
     if (_remainingamt!=0) 
     { 
      Console.WriteLine("Print {0} 100 Notes", _remainingamt);  
     } 

Логика здесь первый 500 суммы должны быть 100 Notes или Notes

Следующая 500 (если оставаясь в сумме) должна быть 500 Note или Notes

На следующий 1000 (если оставшийся в сумме) должна быть 1000 Note или Notes

, но я по-прежнему сталкиваются с проблемами, с определенными суммами.

Может кто-нибудь помочь, пожалуйста

Спасибо Все

+0

на 1000, почему вы Wouldnt печать '2 500 примечание '? – paqogomez

+0

'>' должно быть '> =' возможно? Это может быть хорошим кандидатом для тега «code-trolling» на codegolf.stackoverflow.com – AShelly

+0

@paqogomez По той же причине он печатает 5 '100 нот', когда количество 500 угадывает. – itsme86

ответ

4

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

Вы сказали, что за 1000 вам нужны 1 500 и 5 100. Поскольку банкомат всегда выдавал самые большие счета, я мог предположить, что это должно быть ошибкой, сообщите мне, если я ошибаюсь.

private static void Main(string[] args) 
{ 
    var inputAmount = 4500; 
    var intervals = new[] {100, 500, 1000}; 

    if (inputAmount%100 != 0) 
    { 
     Console.Write("Only bills of in increments of 100 are dispensed"); 
     return; 
    } 

    foreach (var interval in intervals.OrderByDescending(e => e)) 
    { 
     int count = inputAmount/interval; 
     inputAmount = inputAmount%interval; 
     Console.WriteLine("{0} {1} Note", count, interval); 
    } 
    Console.Read(); 
} 

Этот выход:

4 1000 Примечание

1 500 Примечание

0 100 Примечание

+1

Очень прочный код. +1 – usr

Смежные вопросы