如何跟踪自动售货机中可用硬币的硬币编号
How can I keep track of the coin number available coins in a vending machine?
我在c++中有一个学校项目,开发一台简单的自动售货机,它可以接受一美元的钞票,并提供25美分、1美分和5美分的零钱。所有商品的价格都不到1美元。但我需要添加一个额外的功能来跟踪机器中的可用更改,我不知道如何做到这一点。这是我写的一段代码:
#include <iostream>
#include <string>
using namespace std;
int main()
{
//set the variables
int Qav=5 ;
int Dav=5 ;
int Nav=5 ;
int purchaseAmount ;
cout << "Simple Vending Program for Adam Ashouri (Regular Version)" <<endl;
cout <<endl;
cout <<endl;
cout << "Enter a purchase amount [5 - 100] -->";
cin >> purchaseAmount;
int chaneBack = 100 - purchaseAmount ;
changecalculator ();
}
void changecalculator ()
{
int purchaseAmount ;
int QBack ,DBack ,NBack ;
int chaneBack = 100 - purchaseAmount ;
if (purchaseAmount %5 == 0)
{
cout << "You entered a purchase amount of " << purchaseAmount << " cents." <<endl;
cout <<endl;
QBack = chaneBack / 25 ;
DBack = (chaneBack % 25) / 10;
NBack = (chaneBack %25 %10) / 5;
cout <<"Your change of " <<chaneBack <<" cents is given as " <<QBack <<" Q, " <<DBack <<" D,and " <<NBack <<" N." <<endl;
int coinsNum = QBack + DBack + NBack;
cout << "The value of your " <<coinsNum <<" coins adds up to " <<chaneBack <<" cents." <<endl;
cout << "Thank you for using my program.";
}
else
{
cout << "Unable to process an invalid purchase amout of " <<purchaseAmount <<" cents." <<endl;
cout << "Thank you for using my program." <<endl;
}
}
首先,您当前的程序不起作用,因为您没有在函数changecalculator()
内部传输purchaseAmount
。你需要这样做:
1) 将函数的签名更改为:void changecalculator(int iPurchaseAmount)
2) 在函数内发送purchaseAmount
(即这样调用:changecalculator(purchaseAmount);
)
3) 在函数体中使用值iPurchaseAmount
,并从中删除行int purchaseAmount;
。
关于你的主要问题(节省可用硬币的数量):
好的,您已经在程序主体中添加了Qav
、Dav
和Nav
(可用硬币)。这是对的。现在,您必须在changecalculator()
函数中传递这些值。尝试使用函数的签名:void changecalculator(int iPurchaseAmount, int& ioQav, int& ioDav, int& ioNav)
(这些值将在函数体内部可用)。并以此方式调用此函数:changecalculator(purchaseAmount, Qav, Dav, Nav);
。
之后,您只需要分析这些值并在函数中对其进行更改。让我们添加值的更改(在多次调用此函数的情况下,这是必要的)。只需在计算QBack
、DBack
和NBack
后添加以下行:
ioQav -= QBack;
ioDav -= DBack;
ioNav -= NBack;
该任务中最复杂的部分是在计算QBack
、DBack
和NBack
之前对值ioQav
、ioDav
、ioNav
进行分析。让我们做四分之一:
QBack = std::min(chaneBack / 25, ioQav);
它是计算两个值中的最小值:可用季度数和最佳季度数。所以,这条线正好计算出你需要什么。之后你可以计算一角硬币的数量:
chaneBack -= QBack * 25; // subtract quarters
DBack = std::min(chaneBack / 10, ioDav);
如果你理解这个逻辑,你可以为NBack
完成它。
- 最小硬币更换问题(自上而下方法)
- 如何在数组中找到最小编号的索引号?
- 如何在硬币兑换问题中找到硬币的数量
- 贪婪算法编号列表
- 为什么在尝试测量函数返回所需的时间时,我的运行时编号是错误的?
- 硬币兑换:找到多种方法来重现给定的总和
- 为什么在为其分配编号后无法显示我的字符串值?
- 输出返回编号。等于输入字符串的单词的字符串数
- C++ gRPC 线程编号配置
- 在 c++ 中模拟抛硬币时,模数如何工作?
- 检查特定txt文件中的项目是否符合"名称编号USACO"中的约束
- 用给定面值的最小硬币数量计价金额.贪婪的问题
- 抛硬币计数游戏C++数据结构!.
- 如何在硬币兑换中添加记忆
- 使用OpenCV计数硬币
- 使用to_string、reverse、stoi组合的C++反转编号给出运行时错误实例超出范围
- 使用 llvm 和本地值编号算法擦除冗余表达式
- "1L << count"是什么意思?如何使用超出"unsigned long long int? "范围的语句编号打印?
- C++ 访问编号变量
- 如何跟踪自动售货机中可用硬币的硬币编号