假设有3个最大容量的罐子,分别是8升,5升,3升。
初始配置为8升,0升,0升,最终配置为4升,4升,0升。
程序应产生一系列操作以从初始配置达到最终配置,如果没有路径,则返回一条消息。
您的程序应该能够计算出用户指定的任何初始和最终配置的步骤。
我完全困惑。 请给我任何建议..........
答案 0 :(得分:1)
以下不是答案,而是扩展的注释。 (请不要投票。)
我假设传输是这样的,如果将Jar A的部分或全部内容传输到Jar B,则在传输完成后jar A将为空或jar B将已满。
这是一个开始(不是解决方案)。
class Jars
attr_accessor :content
attr_reader :capacity, :target
def initialize(capacity, content, target)
@capacity, @content, @target = capacity, content, target
end
def transfer_to(other_jar)
if self.content <= other_jar.capacity - other_jar.content
# jar self is emptied
other_jar.content += self.content
self.content = 0
else
# other_jar becomes full
self.content -= other_jar.capacity - other_jar.content
other_jar.content = other_jar.capacity
end
end
end
def success?(*jars)
jars.all? { |jar| jar.content == jar.target }
end
jar8 = Jars.new(8, 8, 4)
#=> #<Jars:0x000057c7edc841e8 @capacity=8, @content=8>
jar5 = Jars.new(5, 0, 4)
#=> #<Jars:0x000057c7ede176e0 @capacity=5, @content=0>
jar3 = Jars.new(3, 0, 0)
#=> #<Jars:0x000057c7ede422a0 @capacity=3, @content=0>
jar8.content #=> 8
jar5.content #=> 0
jar3.content #=> 0
success?(jar3, jar5, jar8) #=> false
jar8.transfer_to(jar3)
jar8.content #=> 5
jar5.content #=> 0
jar3.content #=> 3
success?(jar3, jar5, jar8) #=> false
jar3.transfer_to(jar5)
jar8.content #=> 5
jar5.content #=> 3
jar3.content #=> 0
success?(jar3, jar5, jar8) #=> false
,依此类推。您能否提出一种产生success?(jar3, jar5, jar8) #=> true
的算法?