我正在尝试编写一个函数,它接收一个值val
并输出比给定值更小的数字。此数字属于一组具有以下属性的正整数:它们的数字只出现一次,它们是奇数,它们是三的倍数。
这是我到目前为止编写的代码:
def next_numb(n)
x = n + 3
if x % 2 == 1 && x % 3 == 0
return x
end
end
如何测试唯一数字?另外,如果我输入12,答案是15,同样是13。
答案 0 :(得分:1)
要测试数字是否只有唯一值,您可以执行以下操作:
num.to_s.split('').uniq == num.to_s.split('')
您将每个数字拆分为各自的数字,作为字符串,然后运行uniq
以删除重复项,如果它与没有uniq
的数组相同,那么您有一个数字非重复数字。
如果你将它添加到你的if
语句中,它会变得很长,所以我建议你将它包装在一个返回true
或false
的方法中:
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并检查数字是否符合所有条件,如果是,它将返回数字,如果没有,它将返回{ {1}}。
如果您输入nil
,则您的函数将返回15
,因为nil
并非奇数。要返回的正确数字是18
,因此您需要一个循环:
21