Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのコラッツシーケンス


正の整数nがあるとすると、そのCollat​​zシーケンスの長さを見つける必要があります。ご存知のように、Collat​​zシーケンスは、nがn =3n+1の場合でもn=n/2の場合に順次生成されます。このシーケンスはn=1の場合に終了します。

したがって、入力がn =13の場合、出力は10になります。[13、40、20、10、5、16、8、4、2、1]これらはシーケンスです。

これを解決するには、次の手順に従います-

  • numが0と同じ場合、
    • 0を返す
  • 長さ:=1
  • numは1と同じではありませんが、do
    • num:=(num / 2)num mod 2が0の場合、それ以外の場合(3 * num + 1)
    • 長さ:=長さ+ 1
  • 戻りの長さ

理解を深めるために、次の実装を見てみましょう-

class Solution:
   def solve(self, num):
      if num == 0:
         return 0
      length = 1
      while num != 1:
         num = (num / 2) if num % 2 == 0 else (3 * num + 1)
         length += 1
      return length
ob = Solution()
print(ob.solve(13))

入力

13

出力

10

  1. Pythonでシーケンスインデックスによって反復する方法は?

    Pythonのシーケンスオブジェクトは、順序付けられたアイテムのコレクションです。シーケンス内の各アイテム(リスト、タプル、文字列)には、0から始まるインデックスでアクセスできます。 リスト内の要素をトラバースするには >>> L1=[10,20,30,40,50] >>> for i in range(len(L1)): print (L1[i]) 10 20 30 40 50 文字列から一度に1文字をスライスするには >>> string ='TutorialsPoint' >>> for i in

  2. コロン':'演算子はPythonで何をしますか?

    :記号はPythonで複数の目的に使用されます シーケンスのスライス演算子として- −演算子は、リスト、タプル、文字列などのシーケンスオブジェクトからパーツをスライスします。 2つの引数が必要です。 1つ目はスライスの開始のインデックスで、2つ目はスライスの終了のインデックスです。両方のオペランドはオプションです。最初のオペランドを省略した場合、デフォルトでは0になります。 2番目を省略すると、シーケンスの終わりに設定されます。 >>> a=[1,2,3,4,5] >>> a[1:3] [2, 3] >>> a[:3] [1, 2, 3]