gpt4 book ai didi

c - “自动取款机”模拟器

转载 作者:太空宇宙 更新时间:2023-11-04 07:55:04 24 4
gpt4 key购买 nike

我正在尝试解决这个问题,我需要模拟一种 atm 提款。该程序将询问 3 种类型的美元钞票并将其存储在 3 个不同的隔间中,例如海湾 1 = 20;湾 2 = 50;湾 3 = 100;程序要求提现金额后,如果可用,最多给出 3 个选项。

For example: cash out amount: U$ 220

A) 2 x U$ 100 + 1 x U$ 20
B) 1 x U$ 100 + 2 x U$ 50 + 1 x U$ 20
C) 4 x U$ 50 + 1 x U$ 20

我正在努力寻找一种方法来解决 B 和 C 选项,我不知道我是否以我“解决”A 选项的方式隧道愿景,因为我觉得必须有一种更简单的计算方法它

a、b 和 c 变量是 bay 值的冒泡排序

 if(cash_out >= a){
left = total % a; //total = cash_out;
if(left == 0){
cont_A = total / a;
} else {
cont_A = total / a;
total = left;
if(total >= b){
left = total % b;
cont_B = total / b;
total = left;
if(total != 0){
cont_C = total / c;
}
} else {
cont_C = total / c;
}
}
} else if(cash_out >= b){
left = total % b;
if(left == 0){
cont_B = total / b;
left = total % b;
if(left == 0){
cont_C = total / c;
}
} else {
cont_B = total / b;
total = left;
if(total >= c){
cont_C = total / c;
}
}
} else {
cont_C = total / c;
}

需要说明的是,我不是在问,所以有人会为我解决整个问题,我只是想了解我应该如何解决这个问题

代码是我为A选项做的

最佳答案

由于您的问题涉及相当小的数字,您可以从蛮力法开始,即简单地尝试可能范围内的所有组合。

喜欢

#include <stdio.h>

int main(void) {
int bay[3] = {100, 50, 20};
int cash_out = 220;

for (int x = cash_out/bay[0]; x >= 0; --x)
{
for (int y = cash_out/bay[1]; y >= 0; --y)
{
for (int z = cash_out/bay[2]; z >= 0; --z)
{
if (cash_out == (x * bay[0] + y*bay[1] + z*bay[2]))
{
printf("%d %d %d\n", x, y, z);
}
}
}
}
return 0;
}

这将打印:

2 0 1
1 2 1
1 0 6
0 4 1
0 2 6
0 0 11

当然,像上面这样的蛮力方法并不是最优的。所以你的下一步是优化代码。

第一步是摆脱最内层的 for 循环,因为它完全没有必要。我将把它留给你作为练习(提示:z 可以直接计算)。

第二步是通过考虑第一个循环“使用”的数量来限制第二个 for 循环的范围。同样,我将把它作为练习留给你。

关于c - “自动取款机”模拟器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50769318/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com