jmouse 2008-8-7 15:05
2008-08-07 Ruby 测试题(00023)
今天来个简单点的题目吧,希望能调动一下积极性。
输入两个自然数X(5<X<46),N(1<N<9)
将X表示为N个1~9间不同数码的和,输出所有的表示方法。
比如,X=7,N=3则只有(1,2,4);
X=12,N=3则输出(1,5,6),(1,4,7),(1,3,8),(1,2,9),(2,4,6),(2,3,7),(3,4,5)
[[i] 本帖最后由 jmouse 于 2008-8-8 11:16 编辑 [/i]]
jmouse 2008-8-8 11:15
可以选择输出“Error!"或者"No answer."之类的
kevin 2008-8-12 13:37
**** Hidden Message *****
love8909 2008-8-19 22:58
**** Hidden Message *****
wscc111 2008-8-20 09:52
只有3個數相加
**** Hidden Message *****
dish 2008-8-23 17:51
是否通过递归,然后算出结果呢
通过递归方法找到结果,还是通过迭代找结果好呢?不是很懂
yangtao309 2008-8-28 20:58
先看看 然后试试
feishangygwruby 2008-8-29 10:37
看看,在解
dzdbutterfly 2008-9-10 15:42
学习第一
看看啊
waterscar 2008-10-15 14:54
初学ruby,这是我的第一个ruby程序,我觉得应该还有更简便的方法,不过水平所限,贴出来看其他人的答案[code]class Array
def to_s
string="("
self.each do |element|
string=string+element.to_s+","
end
string=string+")"
string=string.sub(/\,\)/,')')
return string
end
end
def sum_random(total,times)
collections=getCollectionOfNumbers(times)
result=[]
collections.each do |collection|
totalNumber=0;
collection.each do |number|
totalNumber+=number
end
result.push(collection) if total==totalNumber
end
result
end
def getCollectionOfNumbers(times)
collections=[]
collection=[]
1.upto(9) do |i|
addNumber(times-1,collection,i,collections)
end
collections
end
def addNumber(time,collection,i,collections)
collection.push(i)
if(time>0)
i.upto(9) do |index|
addNumber(time-1,collection,index,collections)
end
else
collections.push(collection.clone)
end
collection.pop
end
puts sum_random(12,2).to_s
puts sum_random(12,3).to_s[/code]测试结果:
((3,9),(4,8),(5,7),(6,6))
((1,2,9),(1,3,8),(1,4,7),(1,5,6),(2,2,8),(2,3,7),(2,4,6),(2,5,5),(3,3,6),(3,4,5),(4,4,4))