拆分号码和抓取

时间:2011-01-25 09:24:59

标签: java

如果我有:

int money;
money = 378;

现在我想说多少钞票和硬币从这里出来..

瑞典有这些钞票:500,100,50,20和硬币10,5,1

所以我想从上面的money值获得输出:

3x100,1x50,1x20,1x5,3x1

我该怎么做?

5 个答案:

答案 0 :(得分:7)

想想你将如何在现实生活中做到这一点。您可能从最高面额的银行纸币开始,尽可能多地使用(减少剩余金额),然后移至下一个最高等等。

因此,对于您的示例,您从378开始。您可以使用多少500个?没有。所以你仍然有378 ...你可以使用多少100? 3,离开你78去。你可以使用多少50? 1,留下28去等等。

您需要某种代表可用银行票据(和硬币)的集合,并记录您仍需要代表的金额。想想你想如何表示结果。

答案 1 :(得分:3)

使用除法和模运算符。除以最大的账单和向下舍入,然后使用模数的结果作为下一个最大的账单:

378 / 500 = 0.756 -> 0
378 % 500 = 378

378 / 100 = 3.78 -> 3
378 % 100 = 78

78 / 50 = 1.56 -> 1
78 % 50 = 28

28 / 20 = 1.4 -> 1
28 % 20 = 8

8 / 5 = 1.6 -> 1
8 % 5 = 3

3 / 1 = 3

答案 2 :(得分:2)

答案 3 :(得分:1)

  1. 按其值[100,50,20,5,1]
  2. 分类可用的硬币
  3. 尝试使用max if money> gt = = max然后100 * 1,减去[money - max]
  4. 递归致电
  5. 为您的示例: 378

    378 > = 100  ---------- > 100*1
    278 > = 100  -----------> 100 *1
    178 > = 100  -----------> 100 *1
    78 > =   50  ----------->  50 *1
    28 > =   20  ----------->  20 *1
    8 > =     1  ----------->   1 *1
    .
    .
    1 > =     1  ----------->   1 *1
    

    或者更优化的一个

    1. 按其值[100,50,20,5,1]
    2. 分类可用的硬币
    3. 尝试使用max,如果money / max> = 1则最大*除法结果,money = moneybefore%max
    4. 递归致电
    5. 例如:

      378 / 100 = 3.78 >=1 ------------- 3 * 100   and money = 378%100 = 78
      78  / 50  = 1.0somehting >=1 -----1 * 50 and money = 78 %50 = 28  
      
      明智的......

答案 4 :(得分:1)

使用除法和模数:)

378/500将返回0,这意味着500不适合378 378/100将返回3,这意味着100次适合378次3次。 当结果大于0时,使用%来查找其余的 378%100将返回78 重复,直到花了所有:)