找零钱的最小硬币数量和无解情况
2018-3-14 5:56:25
收藏:0
阅读:91
评论:0
我需要帮助给我的找零钱程序添加一个 if 语句,以便在有些情况下,整数面额不能等于硬币面额时返回“Change Not Possible”。例如,我有 2、4、6 分值的硬币,但我需要找的零钱是 1 分,那么我希望它能够返回“Change Not Possible”。我试图添加下面的条件语句,但是当我测试时,它返回了 1.#INF。 此外,我还想知道如何找到最优的解法,以便除了返回最小硬币数量之外,还返回最优的硬币组合 (如果有的话)。
function ChangeMaking(D,n)
--[[
//使用动态规划来找到面额为 d1< d2 <. . . < dm(其中 d1 = 1)的最小硬币数量,它们加起来等于给定的金额 n
//输入:正整数 n 和数组 D[1..m],其中 D[1] = 1,用于表示硬币面额
//输出:加起来等于 n 的最小硬币数量
]]
F = {} -- F 是硬币列表的数组
m = tablelength(D)
F[0] = 0
for i =1,n do
temp = math.huge
j = 1
while j <= m and i >= D[j] do
temp = math.min(F[ i - D[j] ], temp)
j = j + 1
end
F[i] = temp + 1
end
--我想在这里检测失败的情况,但是我返回了 1.#INF
--如果 F[n] <= 0 并且 F[n] == 1.#INF,则打印“无解”并返回
--if F[n] <= 0 and F[n] == 1.#INF then print("No Change Possible") return end
return F[n]
end
function main()
--[[
//打印问候语,请求用户输入由空格分隔的硬币面额
//遍历输入并将值分配给表格
//然后将表格输入到 ChangeMaker 中,while 循环接受用户输入的 n 值。
// 用户输入 0 结束循环
]]
io.write("欢迎使用找零钱程序 - LUA 版本\n请输入一系列找零钱面额,由空格分隔: ")
input = io.read()
deno = {}
for num in input:gmatch("%d+") do table.insert(deno,tonumber(num)) end
local i = 1
while i ~= 0 do
io.write("请输入找零钱的总额,输入 0 结束: ")
input2 = io.read("*n")
if input2 ~= 0 then io.write("\n最小硬币数量: " .. ChangeMaking(deno,input2).."\n") end
if input2 == 0 then i=0 print("输入了 0,退出找零钱程序") end
end
end
function tablelength(T)
--[[
//获取表格的总长度的函数
]]
local count = 0
for _ in pairs(T) do count = count + 1 end
return count
end
main()
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
