现有人民币:1元 2元 5元 10元 20元 50元 100元
要求用户输入金额X
计算出输入金额X最少需要多少张纸币组成。
这个题的金额没定,可以是任何数,我刚开始时想用if判断,但是金额只能在100内结果才是对的,超出100就不行了,
想了半天也想不出来
,请各位高手指点一下,这个题的算法。
现有人民币:1元 2元 5元 10元 20元 50元 100元
要求用户输入金额X
计算出输入金额X最少需要多少张纸币组成。
这个题的金额没定,可以是任何数,我刚开始时想用if判断,但是金额只能在100内结果才是对的,超出100就不行了,
想了半天也想不出来
,请各位高手指点一下,这个题的算法。
2007-03-28 12:22
2007-03-28 12:30
2007-03-28 12:35
2007-03-28 13:52
用余数去和100,50,20,10,5,2,1比
用if实现.
if(n>1)
{
if(n>2)
{ k=n/2;
if(n>5)
{ k=n/5;
if(n>10)
{..................

2007-03-28 15:59
再去除50,接下来就是20.....

2007-03-28 16:02
用余数去和100,50,20,10,5,2,1比
用if实现.
if(n>1)
{
if(n>2)
{ k=n/2;
if(n>5)
{ k=n/5;
if(n>10)
{..................
不用比来比去,就一直除下去就了。

2007-03-28 18:09
任何钱数都可以分解为M=100*x+10*y+z,这里x为任意非负整数,y,z是0~9的数
x是固定的,任何时候都不变,小于100为0;
y、z都只有10种情况,你可以分类计算:
(y,z的考虑方法相同,因为面值有1,2,5,也有10,20,50,只是10倍关系)
例如:y=0时,不用考虑
y=1,2,5时,必定分解为一张(前提是最少)
y=3,4,6,7时,最少两张
y=8,9时,最少三张
所以你拆出x,y,z,可以用以上方法直接得出结果
如果你需要输出分钱的过程,就可以在上面分类的时候直接取出,因为0~9每个数的最少分法只有一种。
2007-03-28 18:34
我只想下面这个最笨的方法,如果用if语句总是不能很简洁,有高手可以写出来简洁的吗?
x1=n/100;
x2=(n%100)/50;
x3=((n%100)%50)/20;
x4=(((n%100)%50)%20)/10;
x5=((((n%100)%50)%20)%10)/5;
x6=(((((n%100)%50)%20)%10)%5)/2;
x7=(((((n%100)%50)%20)%10)%5)%2;
输出xi

2007-03-28 19:17
我在8楼那个方法写出来代码会比较长,(因为分情况讨论)
但是计算过程应该很简单
2007-03-28 19:21