class Array; def sum; inject( nil ) { |sum,x| sum ? sum+x : x }; end; end
def clonearray(arr)
b = []
for a in arr
b << a
end
return b
end
def match(condidatesolution,avail,paymoney)
@temp = 0
for i in 0..avail.size-1
@temp += condidatesolution[i] * avail[i]
end
return ( @temp ==paymoney)
end
def printarray(arr)
print "["
for a in arr
print a.to_s + ","
end
print "]"
end
def makechange2(paymoney,avail)
# 相当于解方程 aW+bX+cY+dZ = paymoney
# 要求:
# 这里W,X,Y,Z = 10,7,5,1
# 要求找到所有的[a,b,c,d]的集合中
# a+b+c+d 是最小的作为解。
#
# 最大范围的数组 [3,5,7,39]
# 获得最大数组 coinmax
@coinmax = []
@coincurr = []
for coinavail in avail
@coinmax << paymoney/coinavail
@coincurr << 0
end
#printarray @coinmax
#printarray @coincurr
@size = @coincurr.size()
# 循环遍历可能解空间,升位,直到 @coincurr[@size-1] > @coinmax[@size-1]
@i =0
@mincoincount = 99999
while @coincurr[@size-1] <= @coinmax[@size-1]
if match(@coincurr,avail,paymoney)
print "a solution:"
printarray @coincurr
puts
@coincount = @coincurr.sum
if @coincount < @mincoincount
@mincoincount = @coincount
@finalsolution = clonearray(@coincurr)
end
end
@first = @coincurr.shift
@coincurr.insert(0,@first+1)
#print "--"
#printarray @coincurr
for i in 0..(@size -2)
if @coincurr[i] > @coinmax[i]
@coincurr[i+1] = @coincurr[i+1] + @coincurr[i] / (@coinmax[i]+1)
@coincurr[i] = @coincurr[i] % (@coinmax[i]+1)
end
end
end
print "finalsolution:"
printarray @finalsolution
end
makechange2( 39,[10,7,5,1])
分享到:
相关推荐
这个"mingw32-make-3.81-2.tar.gz"文件是一个压缩包,其中包含了MingW32-make的源代码、文档以及可执行文件。 在深入探讨MingW32-make之前,我们先来了解一下`make`工具。`make`是一个自动化构建工具,它读取名为`...
标题中的"minGW32-make.rar"提示我们这个压缩包包含的是mingw32-make程序,它是MinGW(Minimalist GNU for Windows)环境中的一个关键工具。MinGW是一个开源项目,目的是为Windows平台提供一套GNU工具集,允许开发者...
"mingw32-make-3.81-20080326-2.tar.gz" 是一个特定版本的MingW32-make软件包,发布于2008年3月26日,版本号为3.81。 这个压缩包文件包含了以下三个主要目录: 1. **bin**:这个目录包含可执行文件,比如mingw32-...
在"mingw32-make-3.81-20080326-src.tar.gz"压缩包内,包含的主要文件名"make-3.81-patched"可能是一个已经针对MinGW环境进行过调整和修补的源代码版本。"patched"通常意味着它包含了对原始GNU Make 3.81的一些修复...
标题 "GnuWin32-Make3.81" 指的是一个针对Windows平台的开源软件项目,它使得用户可以在Windows系统上使用GNU的Make工具。Make是构建自动化工具,主要用于编译和链接源代码,是软件开发过程中的重要组成部分。在...
编译sfml源代码时,发现缺少makefile文件,将该可执行文件放入mingw/bin/文件下即可编译
mingw32-make-3.80.0-3 a linux shell under windows system
3.启动一个命令窗口,使用cargo make build构建项目 4.使用cargo make serve启动项目 5.启动另外一个命令窗口,使用cargo make watch跟踪文件变动,自动构建项目 6. 打开浏览器,地址栏输入:http://127.0.0.1:8000...
在Laravel框架中,`lara-make`是一个高级的命令行工具,用于扩展Laravel的内置`make`命令。这个工具让开发者能够更高效地创建自定义的Artisan命令、控制器、模型、迁移等,从而加速项目的开发流程。在本文中,我们将...
本文将深入探讨由Yalantis公司出品的"pull-to-make-soup"库,它为Android开发者提供了一种创新且富有动画效果的下拉刷新方案,使得RecyclerView等滚动视图的用户体验得以提升。 "Pull-to-make-soup"这个名字源于其...
dh-make-golang, 自动创建Debian打包软件包 dh-make-golang是自动创建Debian打包软件包的工具。 它的目标是在创建一个for包包时尽可以能自动地离开任何工作。概述你所需要指定的是go包 NAME 。 在当前的工作目录中,...
How-to-Make-a-Computer-Operating-System, 在 C 中,如何制作计算机操作系统 如何使计算机操作系统关于如何从头开始编写 C/C 操作系统的在线书籍。注意 : 这个存储库是我旧课程的一个。 我的第一个项目是我在高中时...
在Laravel框架中,`laravel-make`是一个非常重要的命令行工具,它是Laravel Artisan命令行接口的一部分。Artisan是Laravel自带的一个强大的命令行工具,它可以帮助开发者执行各种任务,如创建控制器、模型、迁移、...
标题 "GNU-WIN-MAKE-3.81.rar" 指的是 GNU Make 的 Windows 版本,这是一个软件工具,用于自动化编译过程。在Windows环境下,GNUWin32项目提供了一系列GNU工具的移植版,使得开发者可以在Windows系统上使用类似于...
### GNU-make指南详解 ...通过以上介绍,我们不难发现,GNU-make不仅是一个简单的构建工具,更是一种构建管理和自动化流程的强大手段。掌握其使用方法可以帮助开发者更加高效地完成软件构建任务。
Generator-makethings 是一个这样的工具,它允许你快速搭建自己的项目模板,自定义生成器来满足特定项目的初始化需求。本文将深入探讨 generator-makethings 的源码,帮助读者理解其工作原理,以及如何利用它来优化...
在Laravel框架中,`laravel-make-resource`是一个命令行工具,它可以帮助开发者快速生成模型、迁移、控制器、路由和工厂等资源,从而提高开发效率。这个工具是基于 Laravel 的 Artisan 命令行界面扩展,使得创建关联...
在Laravel框架中,`laravel-make-resource`是一个非常有用的命令行工具,它可以帮助开发者快速生成RESTful API所需的资源控制器及相关文件。这个工具极大提升了开发效率,尤其在构建需要提供HTTP接口的应用时。本文...
Dicom-make-to-PACS : Is a tool that will help you send files to the PACS Dicom-make-to-PACS: 是一个可以帮助您将文件发送到 PACS 的工具
rust-cargo-make动作通过下载可执行文件来安装cargo-make (比cargo install cargo-make更快,几秒钟相对于几分钟)。输入项version 要安装的cargo-make可选版本(例如"0.22.2" , "latest" )。用法示例 - uses : ...