C++

 Computer >> コンピューター >  >> プログラミング >> C++
  1. C++におけるatoi()の再帰的実装方法を解説

    はじめに数値を含む文字列が与えられたとき、再帰的なatoi()メソッドを用いて、その文字列に対応する整数値を求めることを目指します。int atoi(const char *str)は、文字列引数strを整数型(int)に変換する関数です。実行例入力 − Str[] = 58325出力 − 変換された10進数:58325説明 − 文字列には数値58325が含まれており、それがそのまま整数として変換されます。入力 − Str[] = 00010出力 − 変換された10進数:1説明 − 文字列には先頭に余分な0を含む数値10が格納されており、変換後は「1」ではなく「10」相当の値として処理されます

  2. 【C++】再帰を使って素数を判定するプログラムの作り方

    整数が入力として与えられたとき、その入力値 Num が素数か非素数かを再帰(リカーション)を使って判定するのが本記事の目的です。 ある数が素数かどうかを調べるには、i = 2 から i <= Num/2 の範囲を順番に確認していきます。この範囲内のどれかの i で割り切れた場合、その数は素数ではありません。素数は 1 とその数自身でしか割り切れないためです。 例 入力 − Num = 32 出力 − 32 is non-Prime!(32は素数ではない) 説明 − i = 2 から i <= 32/2 の範囲で確認すると、最初の時点で 2 で割り切れてしまうため、素数ではないとわか

  3. C++で数値が回文かどうかを再帰的に判定するプログラム

    整数が入力として与えられます。ここでの目的は、再帰(recursion)を利用して、入力された数値 Num が回文(パリンドローム)であるかどうかを判定することです。回文とは、読む方向に関係なく同じ並びになる文字列や数値のことです。数値が回文かどうかを調べるには、その数を反転し、元の数と比較します。反転した数が元の数と一致すれば、それは回文であると言えます。具体例入力 − Num = 34212;出力 − 34212 is not a Palindrome!解説 − 34212 を反転すると 21243 になります。34212 ≠ 21243 なので、入力された数は回文ではありません。入力 −

  4. 【C++】再帰を使ってn個の整数のGCD(最大公約数)の式を出力するプログラム

    この記事では、整数が入力として与えられたときに、再帰(リカージョン)を利用してn個の整数のGCD(最大公約数)を求める式を出力する方法を解説します。GCDには次のような性質があります。3つの数 a1、b1、c1 の最大公約数は gcd(a1, gcd(b1, c1)) のように表せます。これを一般化すると、3つ以上の数についても、gcd(a1, gcd(b1, gcd(c1, …, gcd(y1, z1))))という入れ子構造の式でGCDを求めることができます。実行例入力: Num = 4;出力:Formula is:GCD(int a3, GCD(int a2, GCD(int a1, in

  5. C++の再帰プログラムによる2進数から10進数への変換

    はじめに本記事では、2進数を表す文字列が与えられたときに、再帰(リカージョン)を用いて等価な10進数を求めるC++プログラムを解説します。2進数を10進数に変換する基本的な方法は以下の通りです。最下位ビット(LSB)から最上位ビット(MSB)へ向かって各桁を走査し、それぞれの桁の値に 2i(0 ≤ i ≤ 桁数)を掛け合わせて、それまでの結果に加算していきます。入出力のシナリオ例例1入力 − binStr[] = 110010出力 − 与えられた2進数に相当する10進数:50説明 − 110010 を10進数に変換すると次のようになります。= 0×20 + 1×21 + 0×22 + 0×23

  6. C++で再帰を使って配列の最小値・最大値を求める方法

    整数型の配列 Arr[] が入力として与えられます。この記事では、再帰(リカーシブ)処理を用いて、配列の中から最大要素と最小要素を見つける方法を解説します。再帰を利用する場合、配列の長さ(len)が 1 になるまで再帰呼び出しを繰り返し、len == 1 になった時点で arr[0] を返します。これがベースケース(基本ケース)です。それ以外の場合は、現在の要素とこれまでに求めた最小値(または最大値)を比較し、より小さい(または大きい)方の値を返しながら、残りの要素へ再帰的に処理を進めていきます。入出力シナリオの例入力 − Arr = {12, 67, 99, 76, 32}出力 − 配列の最

  7. C++のスタック(stack)を使って数値を反転する方法

    はじめに整数 Num が入力として与えられます。この記事では、スタック を使ってこの数値を反転(逆順)にする方法を解説します。スタックとはスタックとは、C++ における基本的なデータ構造の一つで、LIFO(Last In First Out:後入れ先出し) 方式でデータを格納します。最後に追加した要素が最初に取り出される点が大きな特徴です。宣言方法は以下の通りです。stack <int> stck; // stck がスタック変数になりますスタックの主な操作は次の 4 つです。top():先頭要素を参照する ― stck.top() はスタックの先頭要素への参照を返します。pop(

  8. C++で学ぶ再帰的選択ソートの実装方法とサンプルコード

    選択ソート(Selection Sort)は、配列を先頭から順に走査しながら、各位置に「残りの要素の中で最も小さい値」を入れ替えていくことでデータを整列させる、基本的なソートアルゴリズムの一つです。処理が進むにつれて、配列の左側はソート済みの領域となり、右側は未ソートの領域として扱われます。各ステップでは次に小さい要素を見つけて現在のインデックス位置と交換(swap)することで、整列済みの範囲を一つずつ広げていきます。選択ソートのアルゴリズムint arr[5] = { 5, 4, 2, 1, 3 };int i, j;i = 0 から i < 配列サイズ - 1 まで走査するj = i

  9. C++で指定した操作を用いて配列を単一の要素へ縮小する方法

    整数変数 Number が入力として与えられます。ここでは、1 から Number までの範囲の要素が昇順に並んだ配列を考えます。この配列に対して「各ステップで奇数番目の位置にある要素を削除する」という操作を繰り返し、要素が 1 つだけ残るまで処理を行います。そして、最後に残ったその要素を出力することがゴールです。 注意: 要素の位置は、配列のインデックス 0 を「1 番目」、インデックス 1 を「2 番目」として数えるものとします。 配列の要素数ごとのテストケース 入力 Number=1 → 出力 = 1 入力 Number=2 → 出力 = 2 入力 Number=3 → 出力 = 2

  10. C++で優先度付きキューを用いて配列を単一整数に縮小する:二乗和の最大化

    整数 Number が与えられたとき、1 から Number までの整数を任意の順序で含む配列を考えます。この配列に対して以下の操作を Number - 1 回繰り返し、最終的に残る単一の整数の値を最大化する問題を解説します。 問題の定義 配列から2つの要素 A と B を選択する A と B を配列から削除する A² + B²(二乗の和)を配列に追加する この操作を配列の要素が1つになるまで繰り返したとき、得られる値の最大値を求めます。 解法:優先度付きキュー(最大ヒープ)を使用 最終的な値を最大化するには、各ステップで常に「現在最大の2要素」を選ぶのが最適です。なぜなら

  11. C++で分数を最簡形に約分する方法

    2つの整数 Num1 と Num2 が入力として与えられます。これらの整数は分数 Num1/Num2 として表すことができます。ここでの目標は、この分数を最簡形(これ以上約分できない形)にすることです。 GCD(最大公約数)を使って約分する まず、2つの数値の最大公約数(GCD)を計算します。 次に、そのGCDで両方の数値を割ります。 割り算の結果得られた商を、それぞれの変数に代入します。 こうして得られる Num1/Num2 が最簡形の分数になります。 実行例 入力 − Num1=22、Num2=10 出力 − Num1 = 11、Num2 = 5 最簡形の分数:11/5 解説 − 22

  12. C++で数値を1に減らすための最小操作回数を求める方法

    整数 Number が入力として与えられます。この問題の目的は、入力された数値を 1 に減らすまでに必要な最小のステップ数(操作回数)を求めることです。実行できる操作は以下の 2 種類です。Number が偶数の場合: 2 で割るNumber が奇数の場合: 1 を足す、または 1 を引く例例 1入力: Number = 28出力: 28 を 1 に減らす最小ステップ数:6説明:28 は偶数 → 2 で割る = 1414 は偶数 → 2 で割る = 77 は奇数 → 1 を足す = 88 は偶数 → 2 で割る = 44 は偶数 → 2 で割る = 22 は偶数 → 2 で割る = 1例 2入

  13. C++で行列を走査する方法:行優先トラバーサルと列優先トラバーサルの徹底解説

    行列の走査には2つの方法がある2次元行列(マトリックス)の要素を訪問する方法は、大きく分けて2種類あります。行優先(Row-wise)トラバーサルでは、1行目から順に、各行の要素を先頭のインデックスから最後のインデックスまで左から右へと訪問していきます。すべての行を処理し終えるまで、これを繰り返します。一方、列優先(Column-wise)トラバーサルでは、1列目から最終列目へ向かって、各列の要素を上から下へと順番に訪問します。インデックスの基本的な考え方2次元行列 M[i][j] において、インデックス i は行、インデックス j は列を表します。行優先トラバーサルの場合は、次の順序でアクセ

  14. C++で正方行列の2つの対角線に共通する行ごとの要素を数える方法

    入力として2次元の正方行列が与えられたとき、主対角線(左上から右下にかけての対角線)と副対角線(右上から左下にかけての対角線)の両方に共通する要素、すなわち同じ行位置で値が一致している要素を見つけるのが本記事の目的です。 例として、次のような入力行列を考えてみましょう。 1 2 3 2 2 4 1 4 7 この場合、主対角線は「1 2 7」、副対角線は「3 2 1」であり、両方に共通する要素は「2」です。 なお、両対角線には必ず少なくとも1つの共通要素が存在するものとします。 実行例 例1 入力 − Matrix[][5] = {{1, 2, 1}, {4, 1, 6}, {1, 8, 1}}

  15. C++で配列内の要素を両端から再帰的に線形検索するプログラム

    整数型配列 Arr[] には、任意の順序で整数が格納されています。この記事の目標は、配列に対して再帰的な探索を行い、指定された整数 val が配列内に存在するかどうかを見つけることです。もし val が配列 Arr[] 内に見つからない場合は -1 を返します。見つかった場合は、そのインデックス(添字)を出力します。実行例例1:値が見つかる場合入力: Arr[] = {11,43,24,50,93,26,78}, val = 26出力: 26 found at index 5解説:配列の要素はインデックス 0 から「配列長 - 1」まで走査される。 First index=0, Last in

  16. C++で再帰を使ったリンクリストへの挿入と走査の実装方法

    整数値が与えられ、それらを使って連結リスト(リンクリスト)を構築します。ここでの課題は、再帰的なアプローチを用いて、まず単方向連結リストの末尾にノードを挿入し、その後リスト全体を走査(トラバース)して表示することです。再帰による末尾へのノード追加headがNULLの場合 → 新しいノードをheadとして追加するそれ以外の場合 → head->nextに対して再帰的に追加処理を呼び出す再帰によるノードの走査headがNULLの場合 → NULLを出力して終了するそれ以外の場合 → 現在のデータを出力し、head->nextに対して再帰的に走査を続ける実行例入力:1 - 2 - 7 -

  17. C++で連結リストを交互に2つのリストへ分割する再帰的アプローチ

    片方向連結リストが入力として与えられたとき、元のリストのノードを交互に振り分けた2つの片方向連結リストに分割することを目標とします。例えば、入力リストのノードが a → b → c → d → e → f という並びである場合、分割後の2つのサブリストは「a → c → e」と「b → d → f」になります。この問題では、2つのポインタ N1 と N2 を用意します。N1 は元のリストの先頭ノードを、N2 は先頭の次のノードを指すようにします。その後、両方のポインタを「次の次」のノードへ順に移動させながら、それぞれのサブリストを構築していきます。具体例入力 − リスト: 1 → 5 → 7

  18. C++で連結リストの末尾からn番目のノードを再帰的に求める方法

    片方向連結リストと正の整数Nが入力として与えられたとき、再帰を利用してリストの末尾からN番目のノードを見つけるのが本記事の目的です。例えば、入力リストが a → b → c → d → e → f というノード列を持ち、Nが4である場合、末尾から4番目のノードは「c」となります。基本的な考え方は、まずリストの最後のノードまで再帰的に辿り、再帰から戻る際(バックトラック時)にカウントを1ずつ増やしていくというものです。カウントがNと一致したタイミングで、その時点のノードへのポインタを結果として返します。入出力シナリオ入力 − リスト:1 → 5 → 7 → 12 → 2 → 96 → 33、N

  19. 【C++】同じ文字のペアの間に「*」を挿入する再帰プログラムの実装方法

    文字列 str1 が入力として与えられます。この記事のゴールは、入力文字列内で同一の文字が隣り合うペアの間に「*」を挿入し、再帰的なアプローチを用いて結果の文字列を返すことです。 たとえば、入力文字列が str1 = wellness の場合、出力は wel*lne*s*s となります。 実行例 入力 − str1 = happiness 出力 − * 追加後の文字列 : hap*pines*s 説明 − ペア「pp」と「ss」の間に * を挿入することで、結果の文字列 hap*pines*s が得られます。 入力 − str1 = swimmmmingggg pooool 出力 − *

  20. C++で長さと幅の差が最小になる長方形の辺を求める方法

    長方形の面積が入力として与えられたとき、長さと幅の差が最小になるような長方形の辺(縦と横)を見つけるのが本記事の目的です。長方形の面積 = 長さ × 幅例入力 − 面積 = 100出力 − 差が最小の長方形の辺:長さ = 10、幅 = 10説明 − 面積が100になる辺の組み合わせは「2×50」「4×25」「5×20」「10×10」です。この中で差が最小なのは「10×10」で、その差は0です。正方形とはすべての辺の長さが等しい長方形のことなので、この結果は自然ですね。入力 − 面積 = 254出力 − 差が最小の長方形の辺:長さ = 127、幅 = 2説明 − 254 = 2 × 127 であ

Total 5990 -コンピューター  FirstPage PreviousPage NextPage LastPage CurrentPage:274/300  20-コンピューター/Page Goto:1 268 269 270 271 272 273 274 275 276 277 278 279 280