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

Pythonの不器用な階乗


正の整数nの階乗は、n以下のすべての正の整数の積であることがわかっています。したがって、factorial(10)=10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1.不器用な階乗を見つけようとします。整数を降順で使用して、乗算演算を演算の固定ローテーション:乗算(*)、除算(/)、加算(+)、減算(-)の順になります。

不器用な階乗はclumsy(10)=10 * 9/8 + 7-6 * 5/4 + 3-2 * 1のようなものです。ただし、これらの演算は通常の算術演算の順序を使用して適用されます。すべての乗算を実行します。加算または減算ステップの前の除算ステップ、および乗算と除算のステップは左から右に処理されます。私たちが使用している除算は、10*9/8が11に等しくなるようなフロア除算です。これにより結果が整数になることが保証されます。

したがって、たとえば、入力が10の場合、結果は12になります。12=10 * 9/8 + 7 – 6 * 5/4 + 3 – 2 * 1

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

  • opeartions配列を定義し、演算子[* / +-]を格納し、空のスタックを1つ作成して、Nをスタックにプッシュします。
  • インデックス:=0
  • Nを1減らします
  • Nが0でない場合:
    • operation [index] =*の場合、
      • スタックトップ要素が>=0の場合、スタックトップ要素をtop_element:=N * top_element
      • として更新します。
      • それ以外の場合、スタックトップ要素:=-1 * |N*スタックトップ要素|
    • それ以外の場合、operation [index]が/の場合、
      • スタックトップ要素が>=0の場合、スタックトップ要素をtop_element:=top_element/Nとして更新します
      • それ以外の場合、スタックトップ要素:=-1*|スタックトップ要素/N|
    • それ以外の場合、operation [index]が+の場合、
      • Nをスタックに挿入
    • それ以外の場合は(-1 * N)をスタックに挿入します
    • index:=(index + 1)modの操作配列の長さ
    • Nを1減らします
  • スタック要素の合計を返します。

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

class Solution(object):
   def clumsy(self, N):
      operations = ["*","/","+","-"]
      stack = []
      index = 0
      stack.append(N)
      N-=1
      while N:
         if operations[index] == "*":
            if stack[-1]>=0:
               stack[-1] *=N
            else:
               stack[-1] = -1*(abs(stack[-1])*N)
         elif operations[index] == "/":
            if stack[-1]>=0:
               stack[-1] //=N
            else:
               stack[-1] = -1*(abs(stack[-1])//N)
         elif operations[index] == "+":
            stack.append(N)
         else:
            stack.append(-1*N)
         index = (index+1) % len(operations)
         N-=1
      return sum(stack)
ob = Solution()
print(ob.clumsy(10))

入力

10

出力

12

  1. 数の階乗のためのPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 −nの階乗を計算するタスク。 非負数の階乗は-で与えられます n! = n*n-1*n-2*n-3*n-4*.................*3*2*1 この問題には2つの解決策があります 再帰的アプローチ 反復的なアプローチ アプローチ1-再帰的アプローチ 例 def factorial(n): # recursive solution    if (n==1 or n==0):       return 1   &

  2. Pythonのissuperset()

    この記事では、Pythonでのissuperset()と、さまざまな分野でのその実装について学習します。 このメソッドは、セットBのすべての要素に引数として渡されるすべての要素セットAが含まれている場合はブール値Trueを返し、Aのすべての要素がBに存在しない場合はfalseを返します。 これは、BがAのスーパーセットである場合、それを意味します returns true; else False 例 いくつかの例を見てみましょう A = {'t','u','t','o','r','i',