C++

 Computer >> コンピューター >  >> プログラミング >> C++
  1. C++で二分探索木(BST)にノードを挿入する方法を解説

    二分探索木(Binary Search Tree、BST)が与えられたとします。ここでは、挿入したいノードをパラメータとして受け取り、挿入操作を行うメソッドを1つだけ実装します。重要なポイントは、挿入操作を行った後も木がBSTの性質(左の子 < 親 < 右の子)を維持していることです。例えば、次のようなBSTがあるとします。この木に「5」を挿入すると、BSTの規則に従って適切な位置が探索され、木は次のようになります。解決のためのアプローチこの問題は、再帰を使うことでシンプルに解くことができます。手順は以下の通りです。insert() という再帰的なメソッドを実装します。引数として挿入する値 v

  2. C++で2つの文字列を一致させるための最小ASCII削除合計を求める方法

    問題概要2つの文字列 w1 と w2 が与えられます。各ステップでどちらかの文字列から1文字を削除することができ、2つの文字列を一致させるために必要な「削除した文字のASCII値の合計」の最小値を求めるのが目標です。例えば、入力が sea と eat の場合、出力は 231 になります。これは、w1 から s(ASCII値:115)を削除して ea とし、w2 の eat から t(ASCII値:116)を削除すると、両方の文字列が ea となって一致するためです。このときの合計は 115 + 116 = 231 となり、これが実現可能な最小値です。解法の考え方この問題は動的計画法(DP)を使

  3. C++で積がK未満となる部分配列の個数を数える方法

    問題の概要 正の整数からなる配列 nums が与えられます。この中から、部分配列内の全要素の積が k 未満となる(連続した)部分配列の個数を数えて出力します。 例えば、入力が [10,5,2,6] で k = 100 の場合、出力は 8 になります。条件を満たす部分配列は以下の8つです。 [[10], [5], [2], [6], [10, 5], [5, 2], [2, 6], [5, 2, 6]] 解法のアプローチ この問題はスライディングウィンドウ(二ポインタ)の手法を使うことで、O(n) の計算量で効率的に解くことができます。右端を固定しながら配列を走査し、積が k 以上になった時点

  4. Pythonで「毎日の気温」問題を解く:単調スタックを使った効率的なアルゴリズム

    問題の概要 毎日の気温を表すリスト T が与えられたとします。このとき、入力の各日について「より暖かい気温になるまで何日待つ必要があるか」を示すリストを返すことが求められます。将来により暖かい日が存在しない場合は、代わりに 0 を格納します。 例えば、T = [73, 74, 75, 71, 69, 72, 76, 73] の場合、出力は [1, 1, 4, 2, 1, 1, 0, 0] となります。 この問題は、単調スタック(Monotonic Stack)と呼ばれるテクニックを使うことで、効率的に解くことができます。 解法のアプローチ 具体的な手順は以下の通りです。 ans := T

  5. C++で解くパーティションラベル問題:文字列を条件付きで最大分割するアルゴリズム

    問題概要小文字のアルファベットのみで構成される文字列 S が与えられます。この文字列を、同じ文字が複数のパートにまたがって現れないという条件を満たしながら、できるだけ多くのパートに分割します。最後に、各パートのサイズを表す整数のリストを返します。例えば、文字列が「ababcbacadefegdehijhklij」の場合、出力は [9, 7, 8] となります。これは、分割結果が「ababcbaca」「defegde」「hijhklij」の3つのパートになるためです。この分割では、各文字は最大でも1つのパートにしか登場しません。一方、「ababcbacadefegde」「hijhklij」という

  6. C++で配列を分割してソートする際の最大チャンク数を求める方法

    問題の概要[0, 1, ..., arr.length - 1] の順列(パーミュテーション)である配列 arr が与えられたとします。この配列をいくつかの「チャンク(区切り)」に分割し、それぞれのチャンクを個別にソートします。その後、すべてのチャンクを連結した結果が、完全にソートされた配列になるとき、作成できるチャンク数の最大値を求めるのがこの問題です。例えば、配列が [1,0,2,3,4] の場合、出力は 4 になります。[1, 0] と [2,3,4] のように2つのパーティションに分割することもできますが、[1, 0]、[2]、[3]、[4] のように4つに分割することも可能です。これ

  7. C++ STLのdeque::emplace()関数の使い方を徹底解説

    この記事では、C++ STLにおけるdequeのemplace()関数の機能と使い方について詳しく解説します。 Deque(両端キュー)とは? Dequeは「Double Ended Queue(両端キュー)」の略で、コンテナの先頭と末尾の両方で要素の挿入・削除が可能なシーケンスコンテナです。通常のキュー(待ち行列)データ構造では、データの挿入は末尾からのみ行い、削除は先頭からのみ行います。バス停の行列を想像すると分かりやすいでしょう。新しい人は列の末尾に並び、先頭にいる人から順に乗車していきます。一方、両端キューでは、先頭と末尾のどちら側からでもデータの挿入・削除が自由に行えます。 emp

  8. C++ STLのdeque crend()関数とは?使い方をサンプルコード付きで解説

    はじめに本記事では、C++ STLにおけるdeque(デック)のcrend()関数の機能と使い方について、サンプルコードを交えながら詳しく解説します。deque(両端キュー)とは?dequeは「Double Ended Queue(両端キュー)」の略で、コンテナの両端(先頭と末尾)から要素の追加・削除ができるシーケンスコンテナです。通常のキュー(queue)データ構造では、データの挿入は末尾からのみ、削除は先頭からのみ行うことができます。バス停の行列をイメージすると分かりやすいでしょう。行列には後ろから順に並び、先頭にいる人から順に乗車していきます。一方、両端キュー(deque)では、データの

  9. 【C++入門】fread()関数の使い方と動作をわかりやすく解説

    本記事では、C++における fread() 関数の動作について詳しく解説します。あわせて、fread() に渡される各パラメータの意味や、この関数が返す戻り値についても確認していきます。 fread() は、C++標準ライブラリ(<cstdio>)に用意されている組み込み関数で、ストリームからデータブロックを読み込むために使用されます。この関数は、ストリームから「size」バイトのサイズを持つオブジェクトを「count」個分読み取り、バッファメモリへ格納します。読み込みが完了すると、ファイル位置ポインタは読み取った合計バイト数ぶん進められます。処理が成功した場合、読み取られる総バイ

  10. C++のfma()関数とは?構文・使い方・精度の特徴を解説

    本記事では、C++におけるfma()関数の動作について解説します。fma()関数がどのような引数を受け取り、どのような結果を返すのかを、実際のコード例とともに見ていきましょう。fma()は<cmath>ヘッダーファイルに定義されている組み込み関数で、3つの引数 x、y、z を受け取り、「x*y+z」の計算結果を返します。最大の特徴は、中間計算の段階で精度を一切落とさない点です。通常、乗算と加算を別々のステートメントで行うと、乗算の中間結果に対して丸め処理が発生し、誤差が生じる可能性があります。一方、fma()は「融合積和演算(Fused Multiply-Add)」として1回の演算

  11. C++のisfinite()関数とは?構文・戻り値・実例付きでわかりやすく解説

    本記事では、C++のisfinite()関数について、その動作の仕組み、構文、そして具体的な使用例を詳しく解説します。 isfinite()関数とは isfinite()は、<cmath>ヘッダーファイルに含まれる組み込み関数です。この関数は、引数として渡された数値が「有限(finite)」であるかどうかを判定し、その結果を返します。 ここでいう有限数とは、無限大(∞)でもNaN(Not a Number:非数)でもない浮動小数点数のことを指します。つまり、通常の計算可能な数値であればtrueが返されます。 構文 isfinite()関数は、引数の型に応じて以下のようにオーバー

  12. C++のisinf()関数とは?構文・戻り値・使い方を実例付きで解説

    本記事では、C++のisinf()関数について、その構文、動作の仕組み、そして戻り値の挙動を詳しく解説します。isinf()は、<cmath>ヘッダーファイルに含まれるC++の組み込み関数です。引数として渡された数値が無限大(infinity)であるかどうかを判定するために使用され、正の無限大・負の無限大のどちらであっても検出できます。判定結果は以下のように返されます。数値が無限大の場合 → 非ゼロの値(true)を返す数値が有限の場合 → 0(false)を返す数値がNAN(非数)の場合 → 0(false)を返す構文isinf()は、オーバーロードによって複数の浮動小数点型に対

  13. C++のisunordered()関数とは?構文・戻り値・使い方を徹底解説

    本記事では、C++のisunordered()関数について、その構文、動作の仕組み、そして戻り値の詳細をわかりやすく解説します。isunordered()関数は、C++の標準ヘッダーファイル「<cmath>」で定義されている組み込み関数です。この関数は、2つの浮動小数点数を比較し、どちらか一方、あるいは両方がNaN(Not a Number)であるかどうかを判定します。NaNが含まれている場合は1(true)を返し、どちらも有効な数値であれば0(false)を返します。構文bool isunordered(float n1, float n2);またはbool isunordere

  14. C++のdifftime()関数とは?構文・使い方・戻り値をわかりやすく解説

    本記事では、C++標準ライブラリに含まれるdifftime()関数について、その構文、動作の仕組み、そして戻り値について詳しく解説します。difftime()はC++に組み込まれている関数で、<ctime>ヘッダー(C言語では<time.h>)で定義されています。この関数は、time_t型の2つの引数を受け取り、2つの時刻の差を計算します。プログラムの実行時間の計測や、特定の時点からの経過時間を求める際などに活用される便利な関数です。構文double difftime(time_t end, time_t beginning);第1引数には終了時刻(end)、第2引数に

  15. C++のiswpunct()関数とは?構文・動作・戻り値をわかりやすく解説

    本記事では、C++のiswpunct()関数について、その構文、動作の仕組み、そして戻り値を詳しく解説します。iswpunct()関数は、C++の<cwctype>ヘッダーファイルで定義されている組み込み関数です。この関数は、引数として渡されたワイド文字が区切り文字(句読点・記号)であるかどうかを判定します。iswpunct()は、ispunct()関数のワイド文字版に相当する関数です。つまり、ispunct()と同じ動作をしますが、ワイド文字に対応している点が異なります。引数が区切り文字であれば0以外の整数値(真)を返し、そうでなければ0(偽)を返します。区切り文字として判定され

  16. C++ STLのiswspace()関数とは?構文・使い方・戻り値を解説

    本記事では、C++のiswspace()関数について、その構文、動作の仕組み、戻り値を詳しく解説します。iswspace()関数は、C++の組み込み関数の一つで、<cwctype>ヘッダーファイルで定義されています。この関数は、引数として渡されたワイド文字が空白文字かどうかを判定します。iswspace()はisspace()のワイド文字版に相当する関数であり、isspace()と同じ動作をしますが、ワイド文字をサポートしている点が異なります。引数が空白文字( )であれば0以外の整数値(真)を返し、そうでなければ0(偽)を返します。構文int iswspace(wint_t ch)

  17. C++ STLのiswupper()関数とは?構文・使い方・戻り値をわかりやすく解説

    iswupper()関数とは本記事では、C++のiswupper()関数について、その構文・動作・戻り値をサンプルコード付きで詳しく解説します。iswupper()関数はC++に標準で用意されている組み込み関数で、<cwctype>ヘッダーファイル内で定義されています。この関数は、引数として渡されたワイド文字が大文字(A〜Z)であるかどうかを判定します。iswupper()は、isupper()関数のワイド文字版に相当する関数です。isupper()と同じ働きをしますが、ワイド文字をサポートしている点が異なります。引数として渡された文字が大文字(A〜Z)であれば0以外の整数値(真)

  18. C++ STLのiswxdigit()関数とは?構文・戻り値・使用例を徹底解説

    本記事では、C++のiswxdigit()関数について、その構文、動作の仕組み、そして戻り値を詳しく解説します。iswxdigit()関数は、C++に標準で組み込まれている関数であり、<cwctype>ヘッダーファイル内で定義されています。この関数は、引数として渡されたワイド文字が16進数の文字であるかどうかを判定します。引数が16進数の文字であれば0以外の整数値(真)を返し、そうでなければ0(偽)を返します。ここでいう「16進数の文字」とは、以下のいずれかに該当する文字のことです。0 1 2 3 4 5 6 7 8 9 A B C D E F構文int iswxdigit(win

  19. C++のreal()関数とは?複素数の実部を取得する方法を徹底解説

    C++には、複素数を扱うための便利な標準ライブラリが用意されています。本記事では、その中でもreal()関数に焦点を当て、基本的な使い方から実際のコード例まで詳しく解説します。 real()関数とは real()関数は、指定された複素数の実部(Real Part)を取得するための関数です。この関数は <complex> ヘッダファイルに定義されており、引数として渡された複素数から実部の値を返します。 複素数は一般的に「a + bi」の形式で表されます。このとき、bi が虚部(Imaginary Part)、a が実部(Real Part)に相当します。たとえば複素数「14.7 +

  20. 【C++】hypot()・hypotf()・hypotl()関数で直角三角形の斜辺を求める方法

    はじめに本記事では、C++の標準ライブラリに含まれるhypot()、hypotf()、hypotl()関数の動作、構文、具体的な使用例について詳しく解説します。これらの関数はいずれも直角三角形の斜辺を求めるためのもので、戻り値となるデータ型が異なります。hypot()関数とはhypot()関数は、直角三角形の斜辺(hypotenuse)を計算するための関数です。2つの引数の二乗和の平方根を返します。この関数は<cmath>ヘッダーに定義されています。斜辺(hypotenuse)とは?斜辺とは、直角三角形の中で最も長い辺のことで、直角の向かい側に位置する辺を指します。下図の場合、三角

Total 5990 -コンピューター  FirstPage PreviousPage NextPage LastPage CurrentPage:139/300  20-コンピューター/Page Goto:1 133 134 135 136 137 138 139 140 141 142 143 144 145