我正在尝试创建ATM算法。逻辑如下
有3个面额100,500,1000
当金额为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 :(得分: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注意