计算没有If/While/For语句或任何数据结构的更改

Calculate Change Without If/While/For Statement or any data structures

本文关键字:数据结构 任何 For If While 计算 语句      更新时间:2023-10-16

我正在尝试编写一个程序,该程序可以生成最少的零钱(四分之一、五分之一、一角硬币、便士),但规定我不能使用任何类型的if、for、while语句。

我相信这是可能的,但我的能力非常有限,似乎不知道如何在不违反规则的情况下实现这一点。

以下代码有效,当它遇到值0时接受,然后在尝试使用0上的模数时中断(我认为):

#include <iostream>
int main() {
    int cents;
    std::cout << "Enter an amount in cents less than a dollar:" << std::endl;
    std::cin >> cents;
    int quarters = cents/25;
    int remainder = cents % (quarters*25);
    int dimes = remainder/10;
    remainder = remainder % (dimes*10);
    int nickels = remainder/5;
    remainder = remainder % (nickels*5);
    int pennies = remainder/1;
    std::cout << "Your change will be: " << "n Q: " << quarters << "n D: " << dimes << "n N: " << nickels << "n P: " << pennies;
    return 0;
}

您可以在不将每个硬币乘以其出现次数的情况下完成此操作。(不管怎样,模量做的都是你试图自然做的。)

int quarters = cents/25;
int remainder = cents % 25;
int dimes = remainder/10;
remainder = remainder % 10;
int nickels = remainder/5;
remainder = remainder % 5;
int pennies = remainder/1;

这样,在任何情况下都不会对数字0使用模数。

在行中:

    remainder = remainder % (dimes*10);

您允许余数变为0。这将导致除以零:

    int nickels = remainder/5; //0
    remainder = remainder % (nickels*5); // modulo 0 % 0

要在不使用if的情况下执行此操作,您可以根据找到的硬币缩小cents,然后继续。例如:

int quarters = cents / 25;
cents -= quarters * 25;

继续这样。