0

ちょっと、数字が入った配列があります。

ここで、配列の 17 番目の位置の値を配列の最初の位置の値で割り、次に 18 番目を 2 番目の位置で割ります。結果は、新しい配列を構築する必要があります。

次に、新しい配列のすべての値をスキャンし、2 つ以上の連続する値が 1.2 より大きい場合、最初の値をその行の最後の値で割った結果をすべての連続する値に追加します。ある値が 1.2 で、次の値がたとえば 0.8 の場合、配列の値は変更しないでください。

これが私のコードです:

a = [1,2,3,4,5,9,5,13,14,17,19,23,19,34,46,12,13,45,46,67,78,79]

b = Array.new
c = Array.new

a.each_cons(18) { |c| b.push(c[17]/c[0] }

条件を実装する方法を考えていますか?

4

1 に答える 1

1

私はあなたの質問からいくつかのことを選択的に解釈しましたが、これでうまくいくと思います。具体的には、「連続するすべての値のその行の」で、「行」はeach_consからのスライディングブロックを指しますか?「連続するすべての値」についても同様です。

catch (:done) do
  for i in 2..b.length do
    b.each_cons(i) do |d| 
      for j in 2..d.length do 
        d.each_cons(j) do |g|
          if g.all? { |g| g > 1.2 }
            c = b.map { |f| f + (d[0].to_f/d[i-1].to_f) }
            break
          end
          if !c.empty? then throw :done end
        end
      end
    end
  end
end

puts c
于 2012-05-02T01:49:17.770 に答える