Python

 Computer >> コンピューター >  >> プログラミング >> Python
  1. 【Python】再帰処理で2つの数の最大公約数(GCD)を求めるプログラム

    はじめに 2つの数 a と b が与えられたとき、これらの最大公約数(GCD)を再帰的な手法で求めることを考えます。GCDを計算するには、古典的なユークリッドの互除法を利用します。 例えば、入力が a = 25、b = 45 の場合、出力は 5 になります。 アルゴリズムの手順 この問題を解くためには、以下の手順に従います。 gcd() 関数を定義します。引数として a と b を受け取ります。 a と b が等しい場合: a を返します。 a < b の場合: gcd(b, a) を返します(引数の順序を入れ替えて再帰呼び出しします)。 それ以外の場合: gcd(b,

  2. キューブを積み上げられるかどうかを判定するPythonプログラム(deque+貪欲法)

    問題の概要 配列 nums には、n 個の異なるサイズのキューブの一辺の長さが横一列に並んで格納されています。これらのキューブをすべて使って、縦に一本の塔を積み上げることを考えます。 積み上げの際には、次のルールを守る必要があります。 i 番目のキューブが j 番目のキューブの上に載るとき、下側(j 番目)のキューブの一辺の長さは、上側(i 番目)のキューブの一辺の長さ以上でなければならない。 さらに重要な制約として、キューブを取り出せるのは列の左端か右端のみで、中央から直接取ることはできません。この条件のもとで、すべてのキューブを積み上げられるかどうかを判定するのが本記事のテーマです。

  3. Pythonでn番目のフィボナッチ数を求めるプログラム【再帰関数による実装】

    はじめに 数値 n が与えられたとき、再帰関数を定義して n 番目のフィボナッチ数を求めます。 例えば、入力が n = 8 の場合、出力は 13 になります。フィボナッチ数列の最初のいくつかの項は次のとおりです。 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ... 解き方のアプローチ この問題は、以下の手順で解くことができます。 solve() 関数を定義します。この関数は引数として n を受け取ります n <= 2 の場合、n - 1 を返します(1番目の項が 0、2番目の項が 1 になるようにするため) それ以外の場合は、solve(n - 1) + sol

  4. Pythonでn行の回文三角形を出力するプログラム

    数値 n が与えられたとき、n行からなる三角形を出力することを考えます。ただし、各行は回文(左から読んでも右から読んでも同じ並びになる数字列)である必要があります。例えば、入力が n = 5 の場合、期待される出力は次のとおりです。1 121 12321 1234321 123454321解き方のアプローチこの問題は、数学的な性質を利用すると非常にシンプルに解けます。手順は以下のとおりです。 1 から n までの各 i に対して、以下を繰り返す ((10i − 1) ÷ 9) の整数部分を求め、その2乗を表示する 改行する ここで重要なのは、(10i − 1) ÷ 9 が「111…1」という

  5. Pythonでパスカルの三角形を生成するプログラム

    パスカルの三角形とはある整数 n が与えられたとき、n 行分のパスカルの三角形を生成することを考えます。パスカルの三角形は次のような形をしています。パスカルの三角形の性質パスカルの三角形には、「前の行で隣り合う2つの数の和が、その真下に配置される数の値になる」という重要な性質があります。例えば、6行目の最初の「10」は5行目の「4」と「6」の和であり、同じく6行目の2つ目の「10」は5行目の「6」と「4」の和になっています。この性質により、各行を順番に計算していくことで三角形全体を構築できます。入力と出力の例入力が n = 5 の場合、出力は以下のようになります。 1 1 1

  6. Pythonでkサイズの組み合わせから文字「a」を取得する確率を求めるプログラム

    本記事では、n個の英字を含む配列と整数kが与えられたとき、k個の異なるインデックス(1始まり)を一様な確率で選択した場合に、選ばれたインデックスの中に少なくとも1つ文字「a」が含まれる確率を求めるPythonプログラムを紹介します。問題の概要例えば、letters = [a, c, a, b, l, a, b, z]、k = 2 の入力が与えられた場合を考えてみましょう。8つの要素から2つを選ぶ組み合わせは全部で28通り存在します。このうち、(1,2)、(1,3)、(6,7) のように少なくとも1つに「a」が含まれる組み合わせは18通りあります。したがって、求める確率は 18/28 = 0.6

  7. 三角数パターンを出力するPythonプログラムの書き方

    数値 n が与えられたとき、n 行からなる三角形のパターンを出力するプログラムを考えてみましょう。i 行目には、行番号 i をちょうど i 回繰り返した数字を表示します。 例えば、入力が n = 5 の場合、出力は次のようになります。 1 22 333 4444 55555 解き方のアプローチ この問題は、以下の手順でシンプルに解くことができます。 i を 1 から n まで順番に繰り返します。 (10i) を 9 で割った整数部分に i を掛けた値を表示します。 改行して次の行へ移ります。 実装例 それでは、実際のPythonコードを見てみましょう。 def solve(n):

  8. Pythonで複素数クラスを定義する方法|四則演算と絶対値の実装例

    はじめに本記事では、Pythonで複素数(虚数)を扱うための独自クラス「Complex」を定義し、四則演算や絶対値(モジュラス)の計算を実装する方法を解説します。演算子オーバーロードを活用することで、直感的なコードで複素数を操作できるようになります。実装する機能add():2つの複素数の加算sub():2つの複素数の減算mul():2つの複素数の乗算div():2つの複素数の除算mod():複素数の絶対値(大きさ)を取得複素数は (a + bi) の形式で表示します。2つの複素数に対しこれらの演算を行いますが、クラス内部では add()・sub()・mul()・div() に対応する特殊メソッ

  9. Pythonで2つの文字列を交互にマージするプログラムの書き方

    同じ長さを持つ2つの文字列 s と t が与えられたとします。このとき、両者の文字を交互に取り出して連結し、新しい1つの文字列を作ることを考えます。具体的には、s[i] に t[i] を連結し、その後インデックスを1つ進めて同じ操作を繰り返していくイメージです。たとえば、入力が s = hello、t = world の場合、出力は hweolrllod となります。先頭から順に h・w・e・o・l・r・l・l・o・d と交互に並んでいることが確認できますね。解決のための手順この問題を解くには、以下のステップに従います。ステップ1: Python組み込みの zip() 関数を使い、s と t

  10. Pythonで文字列の文字をペアごとに入れ替えるプログラム

    文字列 s が与えられたとき、奇数番目の文字と偶数番目の文字をすべて入れ替えることを考えます。最終的には、隣り合う2文字ずつがペアで交換された新しい文字列を得ることができます。たとえば、入力が s = programming の場合、出力は rpgoarmmnig となります。解決の手順この問題は、以下のステップで解くことができます。まず、文字列 s を文字のリストに変換します。インデックス i を 0 からリストの長さ - 1 まで、2 ずつ増やしながらループします。各ループ内で、s[i] と s[i+1] の値を入れ替えます。最後に、リスト内のすべての文字を連結して文字列に戻し、結果として

  11. Pythonで文字列圧縮(ランレングス圧縮)を実行するプログラムの書き方

    はじめに文字列圧縮のアルゴリズムとしてよく知られているのが「ランレングス圧縮(Run Length Encoding:RLE)」です。これは、同じ文字が連続して現れる回数を数えて、その情報をもとに文字列を短く変換する手法です。例えば、bbbb のように文字 b が4回連続している場合、エンコード後は b4 となります。ただし、1回しか出現しない文字については、カウント数を付けずにそのまま出力します。問題の例入力として次の文字列が与えられたとします。s = abbbaaaaaaccdaaabこの場合、期待される出力は以下の通りです。ab3a6c2da3b内訳を見てみると、a が1回 → a、b

  12. Pythonで2つの文字列の共通プレフィックス(接頭辞)を抽出して圧縮するプログラム

    問題の概要2つの文字列 s と t(いずれも小文字の英字で構成)が与えられたとします。このとき、3つのペアからなるリストを作成します。各ペアは (l, k) の形式で表され、k は文字列、l はその長さです。3つのペアの中身は次のとおりです。1つ目:s と t の最長共通プレフィックス(共通接頭辞)p2つ目:p を取り除いた後の s の残りの部分 s'3つ目:p を取り除いた後の t の残りの部分 t'最終的な出力は、[(pの長さ, p), (s'の長さ, s'), (t'の長さ, t')] という形式になります。たとえば、入力が s = &qu

  13. 【Python】文字列から重複した文字を削除して一意な文字列を生成する方法

    文字列 s が与えられたとき、それまでに出現したことのある文字を取り除き、各文字が1回だけ現れるように圧縮した文字列を返すことを考えます。この問題は、挿入順序を保持できる「順序付き辞書(OrderedDict)」を使うことで、シンプルかつ効率的に解くことができます。 辞書の値には各文字の出現回数(頻度)を格納しますが、今回の目的にとって頻度そのものは重要ではありません。重要なのは「どの文字が最初に登場したか」という順序の情報です。辞書が完成したら、キーを順番に取り出して連結するだけで、求める文字列が得られます。 例えば、入力が s = cabbbaadac の場合、出力は cabd となります

  14. 指定した属性インデックスに基づいてテーブルを並べ替えるPythonプログラム

    問題の概要アスリートに関する情報を格納した2次元リストを考えてみましょう。各要素は「順位(Rank)」「年齢(Age)」「身長(Height)」の3つの属性で構成され、1行が1人のアスリートの情報に対応しています。ここに、もうひとつ整数 k が与えられ、k番目の属性を基準にデータ全体を並べ替えることが求められます。たとえば、入力が次のようなテーブルだったとします。RankAgeHeight125190235180333185426175535180ここで k = 1(年齢を基準)とした場合、出力は次のようになります。RankAgeHeight12519042617533318523518053

  15. 【Python】英数字混在の文字列を「小文字→大文字→奇数→偶数」の順に並べ替える方法

    英字と数字が混在した文字列 s が与えられたとき、次の条件に従って並べ替えることを考えます。 すべての小文字は、大文字よりも前に配置する。 すべての大文字は、数字よりも前に配置する。 数字同士については、奇数を偶数よりも前に配置する。 たとえば、入力が s = HeLlo1234 の場合、出力は eloHL1324 となります。 解き方のアプローチ この問題は、各文字に対して「並び順を決めるための優先度コード」を計算し、その値をソートのキーとして使うことで解けます。具体的な手順は以下のとおりです。 関数 f() を定義します。引数として1文字 c を受け取ります。 code を 0 で初

  16. Pythonで「異なる数のn乗の和」として表せる組み合わせの数を求めるプログラム

    問題の概要 ある数 x ともうひとつの数 n が与えられます。このとき、「互いに異なる(一意な)数の n 乗の和」として x を表す方法が何通りあるかを求めるのがこの問題です。 たとえば x = 100、n = 2 の場合、出力は 3 になります。これは以下の 3 通りの表現が可能だからです。 62 + 82 102 12 + 32 + 42 + 52 + 72 アルゴリズムの考え方 この問題は再帰呼び出しを用いて解くのが自然です。手順は以下のとおりです。 答えを保持する変数 ans を 0 で初期化します。 4つの引数 x、n、cn(現在検討中の数)、cs(それまでの累積和)を受け取

  17. 正規表現でメールアドレスを検証するPythonプログラム

    文字列として与えられたメールアドレスが有効かどうかを、次の条件に基づいて判定するプログラムを考えてみましょう。 形式は「username@company.domain」(ユーザー名@会社名.ドメイン)であること ユーザー名には英大文字・英小文字、数字、ハイフン(-)、アンダースコア(_)のみ使用可能 会社名には英大文字・英小文字と数字のみ使用可能 ドメイン(トップレベルドメイン)には英字のみ使用可能 拡張子(ドメイン部分)の最大長は3文字 このようなパターンの判定には正規表現が最適です。Pythonでは標準ライブラリの re をインポートするだけで正規表現を利用でき、re.match()

  18. Pythonでリストから少なくともk回出現する要素を検索するプログラム

    Pythonでは、要素のリスト nums と整数値 k が与えられたとき、「少なくともk回出現している要素」だけを取り出したい場面があります。これはデータ分析やログ処理など、頻度に基づくフィルタリングを行う際によく使われるテクニックです。問題の概要たとえば、次のような入力があったとします。nums = [2,5,6,2,6,1,3,6,3,8,2,5,9,3,5,1]k = 3この場合、3回以上出現している要素は [2, 5, 6, 3] となります。2 → 3回出現5 → 3回出現6 → 3回出現3 → 3回出現解決のアプローチこの問題は、次の手順で解くことができます。c := リスト nu

  19. Pythonのreduce関数で有理数の積を求める方法を解説

    有理数(分数)のリストが与えられたとき、reduce関数を使ってそれらの積を求める方法を解説します。reduce()関数は、2つの引数を受け取る関数をリストの各要素に対して左から右へ累積的に適用していく高階関数です。例えば、入力が fractions = [(5,3),(2,8),(6,9),(5,12),(7,2)] の場合、出力は (175, 432) になります。これは次の計算によるものです。5/3 × 2/8 × 6/9 × 5/12 × 7/2 = (5×2×6×5×7)/(3×8×9×12×2) = 2100/5184 = 175/432解決の手順空の新しいリスト fracs を用

  20. Pythonで巨大な数の階乗を計算するプログラム

    非常に大きな数 n の階乗を求めたい場面は、プログラミングにおいてよくあります。他の多くのプログラミング言語では、大きな数の階乗は整数データ型(int型など)の表現範囲を簡単に超えてしまうため、そのままでは計算できず、特別なライブラリや多倍長整数の実装が必要になります。しかし、Python には整数の桁あふれという概念がありません。Pythonは整数の大きさを自動的に検出し、必要に応じて内部的により大きな整数表現へと拡張してくれるため、標準ライブラリだけで任意の大きさの階乗を簡単に計算できます。例えば、入力が n = 50 の場合、出力は次のようになります。304140932017133780

Total 8994 -コンピューター  FirstPage PreviousPage NextPage LastPage CurrentPage:374/450  20-コンピューター/Page Goto:1 368 369 370 371 372 373 374 375 376 377 378 379 380