2016-09-07 9 views
0

値を受け取る関数、つまりvalを記述しようとしていて、与えられた値よりも小さい数値を出力しています。この数字は、次のプロパティを持つ正の整数のセットに属します。数字は1回だけ出現し、奇数で3の倍数です。与えられた値よりも高い数値を得る方法

これは私がこれまでに書いたコードです:

def next_numb(n) 

    x = n + 3 
    if x % 2 == 1 && x % 3 == 0 
    return x 
    end 
end 

にはどうすれば固有の番号を調べることができますか?私は12を入力した場合にも、答えは15であり、同じ番号が唯一の一意の値を持っている場合、あなたはこれを行うことができますテストするために13

+0

は 'next_numb(15)' '15'または' 21'を返すでしょうか? –

+0

OPが次の番号を探しているので、それは '21'になります。 – davidhu2000

+0

私は単語 "番号"の略語を見たことはないと思います。 –

答えて

1

ためのものです:

num.to_s.split('').uniq == num.to_s.split('') 

あなたは、そのに各番号を分割しています文字列として個別の数字を入力し、uniqを実行して重複を削除し、uniqのない配列と同じ場合は、重複しない数字の数字が表示されます。

あなたif声明にこれを追加した場合、それはかなり長くなりますので、私はあなたがtruefalseを返すメソッドでこれを包むお勧め:

def unique_digits?(num) 
    num.to_s.split('').uniq == num.to_s.split('') 
end 

あなたif文は次のようになります。

def next_numb(n) 
    x = n + 3 
    if x % 2 == 1 && x % 3 == 0 && unique_digits?(x) 
    return x 
    end 
end 

私はあなたのコードについて他に気付きましたが、それはnに3を追加し、条件がすべての条件を満たしているかどうかを確認し、そうであれば番号を返し、そうでなければ、 nilを返します。

入力が15の場合、18は奇数ではないため、関数はnilを返します。あなたはループが必要になりますので、返却する権利数は、21です:

def next_numb(n) 
    x = n + 1 
    until x % 2 == 1 && x % 3 == 0 && unique_digits?(x) 
    x += 1 
    end 
    x 
end 

def unique_digits?(num) 
    num.to_s.split('').uniq == num.to_s.split('') 
end 

next_numb(13) #=> 15 
next_numb(15) #=> 21 
next_numb(125) #=> 129 
+0

であるので、メソッドは、次のように解釈します。x%2 == 1 && x%3 == 0 && x.to_s.split(//)。uniq == xの場合、メソッドは次のようにdef next_numb(n) x = n + 3 を読み取ります。 to_s.split(//) return x end end' – AltBrian

+0

ええ、私が言ったように、私は読みやすさのために最後の部分をメソッドに入れることをお勧めします。 – davidhu2000

+0

'next_numb 125#=> nil' –

関連する問題