我正在尝试创建ATM算法。逻辑如下:有三个面额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
但我仍然面临着一定数量的问题。
有人能帮忙吗?
谢谢大家
发布于 2014-01-02 20:43:41
这是一个简单的程序,它将做你想要的事情。我不知道你发送的是什么值,这给你带来了问题,但我做了一点测试,我找不到任何。
你说过1000英镑你想要1500美元和5100英镑。由于自动取款机总是能开出最大的钞票,我想这一定是错的,如果我错了,请告诉我。
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支钞票 0100注
https://stackoverflow.com/questions/20889336
复制相似问题