创建ATM算法

时间:2014-01-02 18:26:14

标签: c# algorithm

我正在尝试创建ATM算法。逻辑如下 有3个面额100,500,1000

当金额为100时,输出为Print 1 100 Note

当金额为500时,输出为Print 5 100 Note

当金额为1000时,输出为Print 1 500 NotePrint 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 NotesNotes

接下来的500(如果剩余金额)应为500 NoteNotes

接下来的1000(如果剩余金额)应为1000 NoteNotes

但我仍然面临一定数量的问题。

任何人都可以帮忙吗

谢谢大家

1 个答案:

答案 0 :(得分:4)

这是一个简单的程序,可以满足您的需求。我不确定你发送给你的问题是什么价值,但是对于我所做的一点点测试,我找不到。

你确实说1000,你想要1 500和5 100。由于ATM总是会分配最大的账单,我认为这一定是错误的,如果我不对,请告诉我。

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注意