更有效的重现模数的方法?

More efficiënt way for reoccuring modulo?

我最初用模数尝试过,但没有按预期工作

它一直在给我返还价值(我和我的老师都想不通)

示例:

 Uw krijgt 200 x 2 euro terug
 Uw Krijgt 100 x 1 euro terug
 Uw krijgt 50 x 50 cent terug
 Etc...

它应该做什么

我需要制作一个程序来计算你能找回多少零钱。

输入 5

费用:2

输出:1x 2 欧元,1x 1 欧元,0 x 50 美分,...

我的代码

int Prijs, Ingegooid;
    int Cent1, Cent2, Cent5, Cent10, Cent20, Cent50, Euro, Euro2, Wisselgeld;





    private void btnCola_Click(object sender, RoutedEventArgs e)
    {

        Cent10 = 10;
        Cent20 = 20;
        Cent50 = 50;
        Euro = 100;
        Euro2 = 200;

        Ingegooid = Convert.ToInt32(txbIngegooid.Text);

        Prijs = 190;

        Wisselgeld = (Ingegooid * 100 - Prijs);

        Euro2 = Wisselgeld / Euro2;
        MessageBox.Show("Uw krijgt " + Euro2 + " aantal 2 euro stukken terug.");
        Euro = (Wisselgeld-Euro2*200) / Euro;
        MessageBox.Show("Uw krijgt " + Euro + " aantal 1 euro stukken terug.");
        Cent50 = (Wisselgeld-Euro2*200-Euro*100) / Cent50;
        MessageBox.Show("Uw krijgt " + Cent50 + " aantal 50 cent stukken terug.");
        Cent20 = (Wisselgeld-Euro2*200-Euro*100-Cent50*50) / Cent20;
        MessageBox.Show("Uw krijgt " + Cent20 + " aantal 20 cent stukken terug.");
        Cent10 = (Wisselgeld-Euro2*200-Euro*100-Cent50*50-Cent20*20) / Cent10;


    }

您不一定需要为此取模。 在这种情况下,它实际上可能会产生误导。 示例:90 美分: 1 种可能的解决方法:

1*50c + 2*20c。 另一种方法是: 4*20c + 1*10c。

如果你想尽可能使用最大的硬币,你可以这样做,如果你真的想: 10centAmmount = (变化 % 50) % 20; 在这种情况下 10centAmmount = (90 % 50) % 20; (90 % 50 = 40;40 % 20 = 0 -> 你不需要任何 10 分硬币) 从最大的硬币到最小的硬币工作在这里更有意义。 我还建议从零钱中减去您已经使用过的硬币。由于代码得到 "less crowded"

Euro2 = change/200;
change -= Euro2 * 200
Euro1 = change/100
change -= Euro1 * 100
...

模运算的一个用例是计算一个数是否可​​以被任何其他数整除。 示例:

if (a % 4 == 0) {
    print "a can be devided by 4";

代码也有点混乱。你用 Euro2 来计算一枚欧元硬币的面值,但后来你用它来计算 2 欧元硬币的数量。如果您为此使用不同的变量,就会少一些混淆。您还可以将常量用于永远不需要更改的值,例如 2 欧元硬币的分金额。

希望这种帮助。