如何确定给出一定数量的最小数量的硬币

时间:2014-08-21 23:41:53

标签: java

假设有5种硬币可供选择:美元(100美分),季度(25美分),硬币(10美分),镍币(5美分)和便士(1美分),写一个读取金额的Java程序美分和打印最小可能数量的硬币等于金额。例如,如果读取289,您的程序将打印10个硬币:2美元,3个季度,1个硬币和4个硬币。使用几种不同的金额测试您的程序,包括100,99,1,141和183.您的输出应包括硬币总数以及每种面额的数量。

import java.util.Scanner;
class Hw1 {
  public static void main(String [] args) {
    Scanner in = new Scanner(System.in);

    int amounts; //input variables
    int dollars, quarters, dimes, nickels, pennies; //output variables

    System.out.print("Enter an amount in cent:");
    amounts = in.nextInt();

    //steps for computing dollars, quarters, dimes, nickels, and
    //pennies go here

    System.out.println("number of coins = "+ (dollars+quarters+dimes+nickels+pennies));        
  }
}

我曾经尝试过这次,这是不对的。

import java.util.Scanner;
class Hw1 {
  public static void main(String [] args) {
     Scanner in = new Scanner(System.in);

     int amounts; //input variables
     int dollars, quarters, dimes, nickels, pennies; //output variables
     double totalValue;
     int dollarsValue= 1.00;
     int quartesValue= 0.25;
     int dimesValue= 0.10;
     int nickelsValue= 0.05;
     int penniesValue= 0.01;
     System.out.print("Enter an amount in cent:");
     amounts = in.nextInt();

  //steps for computing dollars, quarters, dimes, nickels, and
  //pennies go here

     System.out.println("number of coins = "+
     (dollars+quarters+dimes+nickels+pennies));

     System.out.print("number of dollars");
     dollars= CONSOLE.netInt();
     System.out.print("number of quarters");
     quarters= CONSOLE.nextInt();
     System.out.print("number of dimes");
     dimes= CONSOLE.nextInt();
     System.out.print("number of nickels");
     nickels= CONSOLE.nextInt();
     System.out.print("number of pennies");
     pennies= CONSOLE.nextInt();

     numberCoins=dollars+quarters+dimes+nickels+pennies;
     totalValue=(dollars+quarters+dimes+nickels+pennies));
      //prinitng out values
       System.out.println("total number of coins" +number of coins);



  }
}

2 个答案:

答案 0 :(得分:3)

以下是您可以实现此目标的基本方法:

  1. 从您拥有的总分数开始,
  2. 检查您是否可以从该数字中减去最大面额?
    1. 如果可以的话,递增该面额的计数器并从美分中扣除,
    2. 否则重新测试下一个最大面额。
  3. 重复直至amounts == 0
  4. 我建议您手动完成这几次以验证其有效性。

    我还想指出你给出的三个测试值的重要性; 100,99和1.这些值是边缘情况,在软件测试中很常见。相关information here


    根据您的修改修改:

    • 此处不要使用doublefloat。钱通常表示为人数的一小部分,但计算机则不然。除了int之外,您不需要其他数字类型。

    • 您不想要求用户输入(我假设CONSOLE.nextInt()您想要in.nextInt()。您希望程序计算这些值。

    • 专注于思考如何使用ifelse ifwhile等控制语句来实现解决方案。 (你有没有了解过这些?)

答案 1 :(得分:-2)

您可能想要使用枚举,因为您需要知道哪个硬币具有哪个值

enum Coin {
    DOLLAR(100),
    QUARTER(25),
    DIME(10),
    NICKEL(5),
    PENNY(1);

    public final int value;

    Coin(int value) {
        this.value = value;
    }
}

在下面的代码中添加一些内容,然后进行设置。假设您正在加入289

static void getMoney(int total) {
    for (Coin coin : Coin.values()) {
        int amount = /* Calculate here how many times the coin value goes into the (remaining) total */
        System.out.println(coin + ": " + amount);
        total = total - /* Calculate here what to subtract from the previous total */;
    }
}

请记住:第一枚硬币为DOLLAR,因此金额应为2,新的总金额应为89。由你来决定原因和方法。