更有效的重现模数的方法?
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 欧元硬币的分金额。
希望这种帮助。
我最初用模数尝试过,但没有按预期工作
它一直在给我返还价值(我和我的老师都想不通)
示例:
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 欧元硬币的分金额。
希望这种帮助。