Pythonでgcdが1より大きい行列の連続する要素の数を見つけるプログラム
n行m列を含む行列が与えられたとします。要素のgcdが1より大きい、マトリックス内の連続する要素の最大数を見つける必要があります。連続する要素は、マトリックス内で水平または垂直に配置できます。
したがって、入力が次のような場合
3 | 7 | 9 | 12 |
5 | 9 | 4 | 6 |
7 | 8 | 5 | 10 |
およびm=4、n =3;その場合、出力は3になります。
与えられた行列の4番目の列は12、6、10です。この列の要素のgcdは2です。3つの要素があるので、答えは3です。
これを解決するには、次の手順に従います-
- mat:=寸法の新しい3Dリストm x n x n
- res:=0
- 0からnの範囲のiについては、
- iからnの範囲のjについては、
- gcd_temp:=0
- x:=0
- 0からmの範囲のkについては、
- iがjと同じ場合、
- mat [i、j、k]:=input_list [i、k]
- それ以外の場合、
- mat [i、j、k] =要素のgcd(mat [i、j-1、k]、input_list [j、k])
- gcd_temp =要素のgcd(gcd_temp、mat [i、j、k])
- gcd_temp>
1の場合、
- x:=x + j-i + 1
- それ以外の場合、
- res:=resの最大値、x
- mat [i、j、k]> 1の場合、
- gcd_temp:=mat [i、j、k]
- x:=j-i + 1
- iがjと同じ場合、
- iからnの範囲のjについては、
- res:=resの最大値、x
- 0からnの範囲のiについては、
- return res
例
理解を深めるために、次の実装を見てみましょう-
from math import gcd def solve(n, m, input_list): mat = [[[0] *m] *n] *n res = 0 for i in range(n): for j in range(i, n): gcd_temp = 0 x = 0 for k in range(m): if i == j: mat[i][j][k] = input_list[i][k] else: mat[i][j][k] = gcd(mat[i][j-1][k], input_list[j][k]) gcd_temp = gcd(gcd_temp, mat[i][j][k]) if gcd_temp > 1: x += j - i + 1 else: res = max(res,x) if mat[i][j][k] > 1: gcd_temp = mat[i][j][k] x = j - i + 1 res = max(res,x) return res print(solve(3, 4, [[3, 7, 9, 12], [5, 9, 4, 6], [7, 8, 5, 10]]))>
入力
3, 4, [[3, 7, 9, 12], [5, 9, 4, 6], [7, 8, 5, 10]]
出力
3
-
Pythonでgodownに入れるボックスの数を見つけるためのプログラム
整数を含む2つの配列があるとします。 1つのリストには、いくつかのユニット幅ボックスの高さが含まれ、別の配列には、godownの部屋の高さが含まれます。部屋には0...nの番号が付けられ、部屋の高さは配列godownのそれぞれのインデックスに示されます。ゴダウンに押し込める箱の数を調べなければなりません。いくつかの点に注意する必要があります ボックスを重ねることはできません。 ボックスの順序は変更できます。 ボックスは左から右にのみゴダウンに入れられます。 ボックスが部屋の高さよりも高い場合、そのボックスとその右側のすべてのボックスをゴダウンに押し込むことはできません。
-
行列の転置を見つけるPythonプログラム
この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 行列が与えられた場合、転置を同じ行列に格納して表示する必要があります。 行列の転置は、行を列に、列を行に変更することで得られます。つまり、A行列の転置はA[i][j]をA[j][i]に変更することで得られます。 以下に示す実装を見てみましょう- 例 N = 4 def transpose(A): for i in range(N): for j in range(i+1, N): &nbs