2012-04-03 21 views
1

我想創建一個ruby程序,其中輸入了三個數字並且他們的總和被採用,但是如果任何數字相同,他們不會計入總和。 示例(4,5,4)= 5 我的問題是與我的表達式。如果我輸入相同的數字,我可以得到多種輸出的各種組合。例如,輸入5,5,5 = 15,5,0ruby​​中的變量和表達式

if a != b or c then 
    puts a+b+c 
elsif b != a or c then 
    puts a+b+c 
elsif c != a or b then 
    puts a+b+c 
end 

if a == b then 
    puts c 
elsif a == c then 
    puts b 
elsif b == c then 
    puts a 
end 

if a == b and c then 
    puts 0 
elsif b == a and c then 
    puts 0 
elsif c == a and b then 
    puts 0 
end 
+0

這是我會怎麼做:1個#排序*陣列* 2#迭代通過數組,併爲每個元素只出現一個(現在他們將在運行相同數字)將它添加到一個新的數組。 #3總結新陣列的內容。 (#1 +#2可以用'Enumerable#group_by'後面的'Enumerable.select'來簡化,#3可以用'Enumerable#reduce'來完成。) – 2012-04-03 22:40:23

回答

2

具有兩個美麗自我解決它說明性的單行

array = [a,b,c] 

array = array.keep_if {|item| array.count(item) == 1 } 
array.inject(0){|sum,item| sum + item} 

-The第一行創建與您的參數的陣列。
- 第二行只保留計數等於1的項目(刪除出現多次的項目),並將其存儲在數組中。
- 第三行將所有其餘元素相加。

瞧,紅寶石路:)

+3

第三行可以寫成'array.inject(0 ,:+)'。這有兩個好處國際海事組織:1)你可以告訴它只是添加,而不是做任何其他事情,更快2)它有一個可愛的表情符號。 – 2012-04-04 00:05:00

+0

點,專門爲第二個參數:D – Castilho 2012-04-04 00:15:31