`
1000copy
  • 浏览: 74381 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

回复“每周一测” - Make change

阅读更多
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-3.81-2.tar.gz"文件是一个压缩包,其中包含了MingW32-make的源代码、文档以及可执行文件。 在深入探讨MingW32-make之前,我们先来了解一下`make`工具。`make`是一个自动化构建工具,它读取名为`...

    minGW32-make.rar

    标题中的"minGW32-make.rar"提示我们这个压缩包包含的是mingw32-make程序,它是MinGW(Minimalist GNU for Windows)环境中的一个关键工具。MinGW是一个开源项目,目的是为Windows平台提供一套GNU工具集,允许开发者...

    mingw32-make-3.81-20080326-2.tar.gz

    "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

    在"mingw32-make-3.81-20080326-src.tar.gz"压缩包内,包含的主要文件名"make-3.81-patched"可能是一个已经针对MinGW环境进行过调整和修补的源代码版本。"patched"通常意味着它包含了对原始GNU Make 3.81的一些修复...

    GnuWin32-Make3.81

    标题 "GnuWin32-Make3.81" 指的是一个针对Windows平台的开源软件项目,它使得用户可以在Windows系统上使用GNU的Make工具。Make是构建自动化工具,主要用于编译和链接源代码,是软件开发过程中的重要组成部分。在...

    mingw32-make.exe

    编译sfml源代码时,发现缺少makefile文件,将该可执行文件放入mingw/bin/文件下即可编译

    mingw32-make-3.80.0-3.

    mingw32-make-3.80.0-3 a linux shell under windows system

    基于cargo-make构建yew-todomvc

    3.启动一个命令窗口,使用cargo make build构建项目 4.使用cargo make serve启动项目 5.启动另外一个命令窗口,使用cargo make watch跟踪文件变动,自动构建项目 6. 打开浏览器,地址栏输入:http://127.0.0.1:8000...

    Laravel开发-lara-make

    在Laravel框架中,`lara-make`是一个高级的命令行工具,用于扩展Laravel的内置`make`命令。这个工具让开发者能够更高效地创建自定义的Artisan命令、控制器、模型、迁移等,从而加速项目的开发流程。在本文中,我们将...

    pull-to-make-soupAndroid.zip

    本文将深入探讨由Yalantis公司出品的"pull-to-make-soup"库,它为Android开发者提供了一种创新且富有动画效果的下拉刷新方案,使得RecyclerView等滚动视图的用户体验得以提升。 "Pull-to-make-soup"这个名字源于其...

    dh-make-golang, 自动创建Debian打包软件包.zip

    dh-make-golang, 自动创建Debian打包软件包 dh-make-golang是自动创建Debian打包软件包的工具。 它的目标是在创建一个for包包时尽可以能自动地离开任何工作。概述你所需要指定的是go包 NAME 。 在当前的工作目录中,...

    How-to-Make-a-Computer-Operating-System, 在 C 中,如何制作计算机操作系统.zip

    How-to-Make-a-Computer-Operating-System, 在 C 中,如何制作计算机操作系统 如何使计算机操作系统关于如何从头开始编写 C/C 操作系统的在线书籍。注意 : 这个存储库是我旧课程的一个。 我的第一个项目是我在高中时...

    Laravel开发-laravel-make

    在Laravel框架中,`laravel-make`是一个非常重要的命令行工具,它是Laravel Artisan命令行接口的一部分。Artisan是Laravel自带的一个强大的命令行工具,它可以帮助开发者执行各种任务,如创建控制器、模型、迁移、...

    GNU-WIN-MAKE-3.81.rar

    标题 "GNU-WIN-MAKE-3.81.rar" 指的是 GNU Make 的 Windows 版本,这是一个软件工具,用于自动化编译过程。在Windows环境下,GNUWin32项目提供了一系列GNU工具的移植版,使得开发者可以在Windows系统上使用类似于...

    GNU-make指南

    ### GNU-make指南详解 ...通过以上介绍,我们不难发现,GNU-make不仅是一个简单的构建工具,更是一种构建管理和自动化流程的强大手段。掌握其使用方法可以帮助开发者更加高效地完成软件构建任务。

    generator-makethings-源码.rar

    Generator-makethings 是一个这样的工具,它允许你快速搭建自己的项目模板,自定义生成器来满足特定项目的初始化需求。本文将深入探讨 generator-makethings 的源码,帮助读者理解其工作原理,以及如何利用它来优化...

    Laravel开发-laravel-make-resource

    在Laravel框架中,`laravel-make-resource`是一个命令行工具,它可以帮助开发者快速生成模型、迁移、控制器、路由和工厂等资源,从而提高开发效率。这个工具是基于 Laravel 的 Artisan 命令行界面扩展,使得创建关联...

    Laravel开发-laravel-make-rest-resource

    在Laravel框架中,`laravel-make-resource`是一个非常有用的命令行工具,它可以帮助开发者快速生成RESTful API所需的资源控制器及相关文件。这个工具极大提升了开发效率,尤其在构建需要提供HTTP接口的应用时。本文...

    Dicom-make-to-PACS

    Dicom-make-to-PACS : Is a tool that will help you send files to the PACS Dicom-make-to-PACS: 是一个可以帮助您将文件发送到 PACS 的工具

    rust-cargo-make::hammer_and_wrench:GitHub动作来安装`cargo-make`命令

    rust-cargo-make动作通过下载可执行文件来安装cargo-make (比cargo install cargo-make更快,几秒钟相对于几分钟)。输入项version 要安装的cargo-make可选版本(例如"0.22.2" , "latest" )。用法示例 - uses : ...

Global site tag (gtag.js) - Google Analytics