首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java中的最小变化贪心算法

java中的最小变化贪心算法
EN

Stack Overflow用户
提问于 2013-01-24 04:06:30
回答 2查看 6.2K关注 0票数 3

好的,我需要写一个程序来问我要多少钱,然后我需要它告诉我制造它的最小硬币数量。我能用的硬币有:美元、25美分、10美分、5分硬币和1便士。例如,当我运行程序时,它应该是这样的:

代码语言:javascript
复制
> run Coins
Enter the amount of given money:
 [1.73]
Give the seller 8 coins:
1 dollars,
2 quarters,
2 dime,
0 nickels,
3 pennies.

这就是我到目前为止所知道的:

代码语言:javascript
复制
import java.util.Scanner;

class Coins {
  public static void main (String args[]) {
     Scanner input = new Scanner(System.in);
     double  money;
     System.out.println("Enter the amount of money ");
     money = input.nextDouble();




     while (money > 0.0 ){
       if (money >= 1) {
          System.out.println(money/1+"dollars");
          money -= 1;

     }
       else if (money>=.25) {
         System.out.println(money/.25+"quarters");
         money-=.25;

       }
       else if (money>=.10) {
         System.out.println(money/.10+"Dimes");
         money-=.10;
       }
       else if (money>=.05) {
         System.out.println(money/.05+"Nickels");
         money-=.05;
       }
       else if (money>=.01) {
         System.out.println(money/.01+"Penny");
         money-=.01;
       }
     }        
  }
}  

我需要帮助的部分是:如果我运行程序并输入金额1.73,按照我编写代码的方式,它取数字1.73,除以1,然后打印"1.73美元“。我需要一种方法去掉小数部分,这样它就不会打印"1.73美元“,而是打印"1美元”。但我不确定该怎么做。我尝试将其转换为int类型,但这会打乱其他语句的流程。请帮帮我。

EN

回答 2

Stack Overflow用户

发布于 2013-01-24 04:13:24

在除法之后,你需要去掉剩余的部分。您可以使用Math.floor()来执行以下操作:

代码语言:javascript
复制
class Coins {
  public static void main (String args[]) {

     double  money = 1.73;

    int dollars = (int) Math.floor(money/1);
    money -= dollars * 1;

    int quarters = (int) Math.floor(money/0.25);
    money -= quarters * 0.25;

    int dimes = (int) Math.floor(money/0.10);
    money -= dimes * 0.10;

    int nickels = (int) Math.floor(money/0.05);
    money -= nickels * 0.05;

    int pennies = (int) Math.round(money * 100);

    System.out.println("Dollars: " + dollars);
    System.out.println("Quarters: " + quarters);
    System.out.println("Dimes: " + dimes);
    System.out.println("Nickels: " + nickels);
    System.out.println("Pennies: " + pennies);
  }
}

结果是:

代码语言:javascript
复制
Dollars: 1
Quarters: 2
Dimes: 2
Nickels: 0
Pennies: 3
票数 2
EN

Stack Overflow用户

发布于 2013-01-24 04:16:46

您应该结合使用floor和强制转换为double,下面的代码可以工作:

代码语言:javascript
复制
class Coins {
    public static void main (String args[]) {
        double  money = 1.73;

        while (money > 0.0 ){
            if (money >= 1) {
                System.out.println(Math.floor(money/1)+" dollars");
                money -= Math.floor(money/1)*(double)1;

            }
            else if (money>=.25) {
                System.out.println(Math.floor(money/.25)+" quarters");
                money-=Math.floor(money/.25)*(double).25;

            }
            else if (money>=.10) {
                System.out.println(Math.floor(money/.10)+" Dimes");
                money-=Math.floor(money/.10)*(double).10;
            }
            else if (money>=.05) {
                System.out.println(Math.floor(money/.05)+" Nickels");
                money-=Math.floor(money/.05)*(double).05;
            }
            else if (money>=.01) {
                System.out.println(Math.round(money/.01)+" Penny");
                money-=Math.round(money/.01)*(double).01;
            }
        }
    }
}

你的另一个bug:

你应该减去Math.floor(money/XXX)*(double)XXX而不是(double)XXX

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14488407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档