-2

大学で以下の運動をしましたが、最後の部分に頭を悩ませることはできません。どのように答えをメモにまとめますか。答えが50などで割り切れない場合はどうなりますか...私はモジュラスと数学のクラスを試しました...

地元の角店のオーナーであるキャッシュマン氏は、スタッフが間違った変更をするのに苦労しています。これに取り組むために、彼はスタッフが買い物の総費用と顧客が支払った金額を入力できるプログラムを作成するようにあなたに依頼しました。次に、プログラムは、顧客に変更として与えるために、50ユーロ、20ユーロ、10ユーロ、5ユーロの紙幣の数、および2ユーロと1ユーロの硬貨の数を計算して出力する必要があります。キャッシュマン氏は小銭の取り扱いを拒否しているため、スタッフは買い物の費用の小数を入力しますが、すべての価格を最も近いユーロに切り下げ、50c、20c、10c、5c、2cを気にしません。または1cコイン。

Cashmans氏の要件に従ってアプリケーションを作成、コンパイル、テストし、クラスをMakingChange.javaとして保存します。

4

2 に答える 2

1

モジュロを使用した正しいアプローチがありますが、整数除算も必要です。値€164を調べてみましょう。

164を50で割ると(整数除算で)、3になります。つまり、3€50のノートが必要です。

50を法として164を計算すると、最終的に14になります。これは、これらの3つの€50ノートを取り出した後に残った値です。これが、20ユーロ紙幣の次の反復の開始点です。

次に、すべての通貨タイプを使い果たすまで、それを続けます。

言い換えると、擬似コードは次のようになります。

def workOutNotes (numEuros):
    left = numEuros
    //                               for 164:      numXXs   left
    num50s = int (left / 50); left = left % 50; //      3     14
    num20s = int (left / 20); left = left % 20; //      0     14
    num10s = int (left / 10); left = left % 10; //      1      4
    num5s  = int (left /  5); left = left %  5; //      0      4
    num2s  = int (left /  2); left = left %  2; //      2      0
    num1s  = left;                              //      0
于 2012-10-13T12:39:56.890 に答える
0

私はあなたのためにC#コードの一部を持っています、それは基本的に変更をますます小さな請求書に分解します:

int changeAmount = 1300;
var bills = new int[] { 200, 100, 50, 20, 10, 5 };

var changeBills = new Dictionary<int, int>();
foreach(int bill in bills)
{
    changeBills.Add(bill, changeAmount / bill);
    changeAmount = changeAmount % bill;
}

コードは、買い物の量ではなく、請求書に収まるように変更をカットします。しかし、このロジックを追加するのは公平だと思います。

于 2012-10-13T12:48:19.243 に答える