C++

 Computer >> コンピューター >  >> プログラミング >> C++
  1. C++のdeleteキーワードを使って二分木(バイナリツリー)を削除する方法

    このチュートリアルでは、C++のdeleteキーワードを使って二分木(バイナリツリー)を削除する方法を学びます。 二分木の削除には、デストラクタメンバ関数を利用します。デストラクタとは、オブジェクトがスコープを抜けたときや、deleteによって明示的に破棄されたときに自動的に呼び出される特殊なメンバ関数のことです。 デストラクタの名前は、クラス名の先頭にチルダ(~)を付けた形で定義します。 解決のための手順 それでは、二分木を削除するまでの手順を順番に見ていきましょう。 Nodeという名前のクラスを定義します。 ノードのデータを受け取るコンストラクタを作成します。 デストラクタを定義します

  2. C++で二分木のノードを削除する方法を徹底解説

    このチュートリアルでは、C++における二分木(バイナリツリー)からノードを削除する方法について学びます。二分木の削除の基本的な考え方二分探索木(BST)と異なり、二分木のノードには特定の順序規則がありません。そのため、ノードを削除した後に木の構造をどのように整えればよいのでしょうか。答えはシンプルです。削除したいノードを、木の中で最も深い位置にあるノード(最深ノード)と入れ替え、その後、最深ノードを削除します。この手法により、木の構造を崩すことなく任意のノードを取り除くことができます。解決手順それでは、問題を解決するための手順を確認しましょう。二分木のノード構造体を定義し、木を初期化します。木

  3. C++でバイナリ文字列から「01」「10」のペアを削除!必要な最小削除回数を求める方法

    このチュートリアルでは、バイナリ文字列(0と1のみで構成される文字列)から「01」および「10」のペアをすべて取り除くために必要な削除回数の合計を求めるC++プログラムを紹介します。まずは具体例を見てみましょう。 入力 − 101010001 出力 − 4 上記の例では、「01」と「10」のペアをすべて文字列から除去するために、合計4回の削除が必要になります。 すべてのペアを削除した後に残る文字列は 0 です。 解法の考え方 バイナリ文字列から「01」と「10」のペアをすべて削除するということは、隣り合う異なる文字(0と1)を順番に取り除いていくことを意味します。この操作を繰り返すと、最終的に

  4. C++で1回の走査により二分木の密度を求める方法

    はじめに このチュートリアルでは、1回の走査(トラバーサル)だけで二分木の密度を求める方法について解説します。 二分木の密度は、次の式で定義されます。 密度 = 木のサイズ ÷ 木の高さ 木のサイズ:与えられた二分木に含まれるノードの総数 木の高さ:根ノードから最も深い葉ノードまでの最大深度 アルゴリズムの手順 問題を解くための手順は以下の通りです。 二分木のテストデータを初期化します。 木のサイズと高さを同時に求めます。 再帰的に木の高さを計算します。 左右の部分木の高さを比較し、大きい方に1を加えた値を返します。 訪問したノードごとにサイズをインクリメントします。 「木のサイズ

  5. C++でデムロ数(Demlo Number)を求める方法:1, 11, 111…の平方数

    このチュートリアルでは、デムロ数(Demlo Number)について学びます。デムロ数とは、1、11、111、1111…といった「1」だけで構成される数(レピュニット)の平方として得られる数のことです。デムロ数は 1 2 3 4 5 … n-2 n-1 n n-1 n-2 … 5 4 3 2 1 という特徴的な形をしているため、非常に簡単に求めることができます。ここでは、「1」だけで構成された数が与えられ、その数に対応するデムロ数を求めることを目標とします。具体例を見てみましょう。入力: 1111111出力: 1234567654321解き方の手順対象となる数を文字列形式で初期化します。デムロ

  6. C++でN分木(N-Aryツリー)の深さを求める方法

    このチュートリアルでは、N分木(N-Aryツリー)の深さを求める方法について解説します。N分木とは、木を構成する各ノードが持つことのできる子ノードの数がn個以下に制限された木構造のことです。本記事では、このN分木の深さ(根ノードから最も深い葉ノードまでの階層数)を求めるプログラムをC++で実装します。各ノードの子ノードは、vectorを使って格納します。アルゴリズムの手順ダミーデータを使って木を初期化します。N分木の深さを求める再帰関数を作成します。木の最大深度を保持する変数を0で初期化します。各ノードの子ノードを順番に走査します。現在の最大深度と、その子ノードを根とする部分木の深度を比較し、

  7. C++で二分木における最も深い奇数レベルノードの深さを求める方法

    このチュートリアルでは、C++を使って二分木(バイナリツリー)の中から最も深い奇数レベルにあるノードの深さを求める方法を学びます。これは二分木の深さを求める処理とよく似ています。ただし、今回は「現在のレベルが奇数であるかどうか」という条件が1つ追加される点が異なります。それでは、問題を解くための手順を順番に見ていきましょう。ダミーデータを使って二分木を初期化します。二分木の中で最も深い奇数レベルのノードを見つけるための再帰関数を作成します。現在のノードが葉ノードであり、かつそのレベルが奇数の場合は、現在のレベルを返します。それ以外の場合は、左の子ノードと右の子ノードに対して再帰的に関数を呼び出

  8. 【C++】Deserium数とは?判定方法をサンプルコード付きで解説

    はじめにこのチュートリアルでは、「Deserium数」について、具体的な例を交えながら解説します。各桁の数字を、その桁の位置に応じた指数で累乗した値の合計が、元の数と一致する数のことをDeserium数と呼びます。ここでいう指数は、左端の桁を1乗とし、右に進むごとに1ずつ大きくしていきます(右端の桁は「桁数」乗になります)。例として「135」を考えてみましょう。11 + 32 + 53 = 1 + 9 + 125 = 135累乗の合計が元の数と一致するため、135はDeserium数です。同じように、89(81 + 92 = 8 + 81 = 89)もDeserium数に該当します。Deser

  9. C++で行列の行列式を求める方法を解説

    このチュートリアルでは、C++を使って行列の行列式(determinant)を求める方法を学びます。再帰的な余因子展開を利用することで、任意のサイズの正方行列に対して行列式を計算できます。行列式を求める手順まず、全体の流れを確認しましょう。行列を初期化します。行列式を求める関数を作成します。行列のサイズが1または2の場合は、直接計算します。これは簡単な処理です。行列式・小行列・符号用の変数を初期化します。1から行列のサイズNまで繰り返し処理を行います。現在注目している要素に対応する小行列(その要素の行と列を除いた要素すべて)を作成します。現在の要素とその余因子の積を行列式に加算します。符号を反

  10. C++で正N角形上の3人目の最適な位置を求める方法

    このチュートリアルでは、正N角形上における3人目の人物の最適な位置を求める方法を解説します。 正N角形が与えられ、すでに2人の人物がそれぞれ異なる頂点に立っているものとします。ここでの課題は、既存の2人から3人目までの距離の合計が最小になるように、3人目を配置すべき頂点を見つけることです。 アルゴリズムの手順 問題を解くための手順は以下の通りです。 Nと2つの頂点A、Bを初期化します。 3人目の位置を格納する変数と、最小合計値を初期化します。 1からNまで繰り返し処理を行います。 現在の頂点がAまたはBの場合はスキップします。 現在の頂点とA、Bとの差の絶対値の合計を計算します。 その合計

  11. C++で正七角形の対角線の長さを求める方法

    このチュートリアルでは、C++を使って正七角形の対角線の長さを求める方法を解説します。 正七角形の対角線の長さは、一辺の長さから簡単に計算できます。具体的には、対角線の長さは 1.802 × s で表されます。ここで、s は正七角形の一辺の長さです。 計算式の背景 この係数 1.802 は、正七角形の幾何学的な性質から導かれる定数で、厳密には 2cos(π/7) ≒ 1.80194 に相当します。実用上は 1.802 を使えば十分な精度で対角線の長さを求めることができます。 サンプルコード それでは、実際のコードを見てみましょう。 #include <bits/stdc++.h>

  12. C++プログラムで正六角形の対角線の長さを求める方法

    このチュートリアルでは、C++を使って正六角形の対角線の長さを求める方法について解説します。 与えられた一辺の長さから、正六角形の対角線の長さを計算します。正六角形の対角線の長さは 1.73 × s という式で求められます。ここで、s は六角形の一辺の長さです。 数式の背景 正六角形の対角線(隣り合わない頂点を結ぶ線分)の長さは、一辺の長さの √3 倍になります。√3 ≈ 1.732 であるため、このプログラムでは近似的に 1.73 を係数として使用しています。 サンプルコード それでは、実際のコードを見てみましょう。 #include <bits/stdc++.h> using

  13. C++で正五角形の対角線の長さを求める方法

    このチュートリアルでは、C++を使って正五角形の対角線の長さを求める方法を解説します。 正五角形の対角線とは 正五角形の対角線とは、隣り合っていない2つの頂点を結ぶ線分のことです。正五角形には5本の対角線があり、その長さはすべて同じになります。 計算方法 与えられた一辺の長さ s をもとに、次の式で対角線の長さを求めることができます。 対角線の長さ = 1.22 × s ここで、s は正五角形の一辺の長さです。この係数を使うことで、辺の長さだけから簡単に対角線の長さを計算できます。 サンプルコード それでは、実際のコードを見てみましょう。 #include <bits/stdc++.h&

  14. C++で対角優位行列を判定するプログラムの作成方法

    このチュートリアルでは、C++を使って「与えられた行列が対角優位行列(対角優勢行列)かどうか」を判定するプログラムを作成します。対角優位行列とは?ある行列が対角優位行列であるとは、各行において、対角要素以外の要素の絶対値の合計が、その行の対角要素の絶対値以下であることを指します。次の行列を見てみましょう。4 2 1 3 5 2 2 4 7この行列は対角優位行列です。理由は以下の通りです。4 > 2 + 1 5 ≥ 3 + 2 7 > 4 + 2すべての対角要素が、同じ行内の非対角要素の合計以上になっていることが確認できます。解決手順行列の各行・各列を順番に走査します。その行の

  15. C++でn問の試験における加点・減点方式の全得点パターンを求める方法

    本記事では、n問の試験において「正解で加点、不正解で減点」という採点ルールが適用される場合に、学生が取り得るすべての得点パターンを求めるC++プログラムを紹介します。問題の概要例として、全10問の試験を考えてみましょう。各問題は正解で2点、不正解で-1点となります。このとき、学生が試験で取り得る得点は何通りあるのでしょうか。この記事では、その総数を効率的に計算する方法を解説します。解決の手順以下のステップで問題を解いていきます。問題数n、正解時の加点x、不正解時の減点yを初期化します。可能な得点を格納するためのset(集合)を用意します。0から問題数までの範囲で二重ループを実行し、すべての解答

  16. C++で指定した文字列から始まり・終わる異なる部分文字列の数を求める方法

    はじめにこのチュートリアルでは、指定された文字列で始まり、別の指定された文字列で終わる部分文字列の総数を求めるプログラムをC++で作成します。問題設定として、1つの文字列と2つの部分文字列(開始文字列と終了文字列)が与えられます。その2つの条件を両方とも満たす「異なる」部分文字列の個数を数えるのが目的です。まずは具体例を見てみましょう。入出力例入力str = "getmesomecoffee" start = "m" end = "e"出力6この例では、与えられた文字列の中に条件を満たす異なる部分文字列が合計6つ存在します。具体的には

  17. 【C++】大きな整数のデジタルルート(繰り返し桁合計)を求めるプログラム

    はじめにこのチュートリアルでは、C++を使って与えられた大きな整数の「デジタルルート(デジタル根)」を求める方法を解説します。デジタルルートとは、ある数の各桁の合計を計算し、その結果が1桁になるまで同じ操作を繰り返して得られる値のことです。例えば「12345」の場合、まず 1+2+3+4+5=15 となり、さらに 1+5=6 となるため、デジタルルートは 6 になります。ここでは、int 型では表現できないような非常に大きな整数にも対応できるよう、数値を文字列形式で受け取ることを想定します。アルゴリズムの手順文字列形式で整数を初期化します。文字列を先頭から順に走査し、各桁の数字を合計変数に加算

  18. C++で2つの配列の要素ごとの合計を桁に分解して新しい配列に格納する方法

    このチュートリアルでは、2つの配列の対応する要素同士を加算し、その結果を別の配列に格納するC++プログラムの作成方法を解説します。2つの配列が与えられ、同じインデックスの要素を足し合わせていきます。合計が2桁以上の数値になった場合は、その数値を桁ごとに分解し、1桁ずつ新しい配列に格納するのがポイントです。まずは具体例を見てみましょう。入力例arr_one = {1, 2, 32, 4, 5} arr_two = {1, 52, 3}出力例2 5 4 3 5 4 5この例では、1+1=2、2+52=54(→「5」「4」に分解)、32+3=35(→「3」「5」に分解)となり、残りの要素4と5はその

  19. C++プログラムで同じ色のボールを重複させずにすべて配布する方法

    このチュートリアルでは、n個のボールをk人の生徒に、誰にも不満が出ない形で配布できるかどうかを判定する方法を解説します。考え方はとてもシンプルです。異なる色のボールが合計n個あり、これらを生徒たちに配布します。ただし、どの生徒にも同じ色のボールを2個以上渡してはいけないというルールがあります。もし同じ色のボールを1人の生徒が複数個受け取る可能性があるなら、その配布は実行できません。問題の例具体的な例を見てみましょう。入力n = 10 k = 5 ballsColors = rrrgbrbgbr出力Yesこの例では、どの色のボールも生徒の数(k=5)を超えていません。そのため、どの生徒も同じ色の

  20. 【C++】数値を差がkとなる2つの部分に分割するプログラムの作り方

    はじめにこのチュートリアルでは、ある数値 n を「差が k」となる2つの部分に分割する C++ プログラムを紹介します。具体的には、n を2つの数 a と b に分け、a − b = k を満たす組み合わせを求める問題です。入力例n = 100 k = 30出力例65 35解法の考え方(数学的なアプローチ)この問題は、連立方程式を使うことで非常にシンプルに解くことができます。まず、次の2つの式を立てましょう。a + b = n(2つの部分の合計が n)a − b = k(2つの部分の差が k)この2式を辺々加算すると、b の項が消えて以下の公式が得られます。a = (n + k) / 2 b

Total 5990 -コンピューター  FirstPage PreviousPage NextPage LastPage CurrentPage:249/300  20-コンピューター/Page Goto:1 243 244 245 246 247 248 249 250 251 252 253 254 255