查看完整版本: 2008-08-07 Ruby 测试题(00023)

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]]

xavier 2008-8-7 17:56

那如果X=6,N=8这样的情况怎么输出?

jmouse 2008-8-8 11:15

可以选择输出“Error!"或者"No answer."之类的

kevin 2008-8-12 13:37

**** Hidden Message *****

calebx 2008-8-14 15:00

好像还是很难,脑子不好用。。。

love8909 2008-8-19 22:58

**** Hidden Message *****

wscc111 2008-8-20 09:52

只有3個數相加

**** Hidden Message *****

keymi 2008-8-20 10:08

想想,好像不太简单呢~!

dish 2008-8-23 17:51

是否通过递归,然后算出结果呢

通过递归方法找到结果,还是通过迭代找结果好呢?不是很懂

yangtao309 2008-8-28 20:58

先看看 然后试试

feishangygwruby 2008-8-29 10:37

看看,在解

xinghu 2008-9-5 15:41

新手,新手

dzdbutterfly 2008-9-10 15:42

学习第一

看看啊

woftfox 2008-9-11 09:44

看看答案呀.

brave_x 2008-9-24 13:59

很不错,想学学

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))

guhguh 2008-10-17 01:55

哈哈,看看答案,学习学习
页: [1]
查看完整版本: 2008-08-07 Ruby 测试题(00023)