1

数値を取得して中央値を出力する Ruby スクリプトを作成しています。これは私のコードです

numbers = Array.new    
numbers = [gets]     
def median(numbers)     
    sorted = numbers.sort
    mid = numbers.length/2 sorted[mid] 
    numbers.push mid    
end 
end

実行すると、数値を要求されますが、中央値は得られません...

4

5 に答える 5

3
def median(array)
  array.sort!
  if array.length % 2 == 0
    median_value = (array[array.length / 2] + array[array.length/2 - 1]) / 2.0
  else
    median_value = array[array.length / 2]
  end
end
于 2013-02-17T01:53:49.587 に答える
2

median メソッドを呼び出すことはなく、定義するだけです。

于 2011-04-26T00:29:06.863 に答える
1

Enumerableで使用するいくつかのmonkeypatchを次に示します。これには、中央値用のものも含まれます。

module Enumerable
  # Does not sort the values; do this yourself before calling if you like
  def median( &blk )
    values = blk ? map( &blk ) : self
    values[ values.length / 2 ]
  end
  def sum( &blk )
    values = blk ? map( &blk ) : self
    values.inject(0){ |sum,v| sum + v }
  end
  def average( &blk )
    (length==0) ? 0 : (sum( &blk ) * 1.0 / length)
  end
  alias_method :avg, :average
  def std_dev( &blk )
    values = blk ? map( &blk ) : self
    mean = values.average
    Math.sqrt( values.map{ |value| (value-mean)*(value-mean) }.average )
  end
  def dups_by
    keyvals = Hash.new{|h,v|h[v]=[]}
    each{ |v|   keyvals[yield(v)] << v }
    result = []
    keyvals.each{ |k,v| result << v if v.length > 1 }
    result
  end  
end
于 2011-04-26T01:56:58.647 に答える
1

ここにはいくつかの問題があります。

  1. ここに投稿したものからは必要ないという追加のendキーワードがあります。
  2. gets文字列を返します。たとえば、スペースで区切られた数値を収集し、これから配列を作成できます。
  3. あなたは電話をかけていませんmedian、それがあなたに中央値を与えない理由です。

したがって、このようなものが機能します:

def median(numbers)     
    sorted = numbers.sort
    numbers[numbers.length/2]  
end 

p median(gets.split(' '))
于 2011-04-26T02:00:17.723 に答える
1

これは宿題ですか?

まず、入力内容が自分の考えているものであることを確認してください。コードを median.rb というファイルに配置し、rdebug を実行しました。[gets]の後の数値配列の内容に注意してください。

$ rdebug median.rb
median.rb:1
numbers = Array.new
(rdb:1) n
median.rb:2
numbers = [gets] 
(rdb:1) n
1 2 3 4 5 6 7
median.rb:5
def median(numbers) 
(rdb:1) p numbers
["1 2 3 4 5 6 7\n"]
(rdb:1) p numbers[0]
"1 2 3 4 5 6 7\n"
(rdb:1) p numbers[0].class
String
(rdb:1)
于 2011-04-26T00:28:10.857 に答える