C++

 Computer >> コンピューター >  >> プログラミング >> C++
  1. C++で行列の各列の最大要素を見つける方法

    行列が与えられたとき、その行列の各列の最大要素を見つけて出力するのが本記事の目的です。このタスクは非常にシンプルで、各列ごとに最大値を初期化し、列内のすべての要素を順に比較しながら最大値を更新していくだけです。それでは、理解を深めるために実際のコードを見ていきましょう。アルゴリズムの考え方基本的な手順は以下の通りです。列を表すインデックス i を 0 から cols-1 まで順に走査します。各列の処理を開始する際に、最大値をその列の先頭要素 mat[0][i] で初期化します。行を表すインデックス j を 1 から rows-1 まで走査し、mat[j][i] が現在の最大値より大きければ最大

  2. C++で行列の各行の最大要素を見つける方法

    プログラミングにおいて、行列(2次元配列)から特定の値を抽出する操作は、よく使われる基本テクニックのひとつです。今回は、与えられた行列の各行の最大要素を見つけて出力する方法を解説します。このタスクは非常にシンプルです。各行に対して暫定最大値をリセットし、行内の要素を順番に比較して最大値を求め、それを出力するだけです。それでは、理解を深めるために実際のコードを見てみましょう。アルゴリズムの流れ処理の手順は以下の通りです。各行について、その行の最初の要素を暫定最大値として設定します。2番目の要素から順に、暫定最大値と比較していきます。比較対象の要素が暫定最大値より大きければ、暫定最大値を更新します

  3. C++で再帰を使って単方向リンクリストの中央要素を求める方法

    数値からなるリンクリストが与えられたとき、再帰処理を使ってリストの中央要素を求めることを考えます。例えば、リストの要素が [12, 14, 18, 36, 96, 25, 62] の場合、中央に位置する要素は 36 です。 アルゴリズムの考え方 この問題は「再帰でノード数を数え、戻りながらカウンタを減らす」というシンプルな発想で解くことができます。具体的な手順は以下のとおりです。 再帰呼び出しを用いて、リスト全体のノード総数を数えます。 リストの末端(NULL)に到達した時点で、カウンタを半分にします。 再帰から戻る過程で、呼び出しごとにカウンタ n を 1 ずつ減らします。 n が 0 に

  4. C++で数値の最上位セットビット(MSB)の値を求める方法

    この記事では、与えられた数値に対して、最上位セットビット(MSB:Most Significant Bit)の値を求める方法を解説します。MSBの値は必ず2のべき乗になります。例えば、数値が10であれば、MSBの値は8です。手順としては、まずMSBが何番目のビットに立っているか(位置k)を求め、その位置にセットビットが立った数値、すなわち 2k を計算します。実装例以下のC++コードでは、log2 関数でMSBの位置を求め、pow 関数で2のべき乗を計算しています。#include<iostream> #include<cmath> using namespace st

  5. 【C++】Dで割り切れるN桁の数を見つけるアルゴリズム

    2つの整数 N と D が与えられたとき、D で割り切れる N 桁の数を見つける問題を考えます。例えば、N = 3、D = 5 の場合、答えは 500 になります。一見難しそうに思えるこの問題ですが、実はとてもシンプルな発想で解決できます。解法のアイデア基本となる考え方は、「D を先頭に置き、その後ろに 0 を付け足して N 桁にする」というものです。D の桁数を m とすると、D の末尾に (N − m) 個の 0 を連結した数は、全体でちょうど N 桁となり、必ず D で割り切れます。これは、作成される数が D × 10(N−m) に相当し、10 のべき乗を掛けても D で割り切れるという

  6. C++で指定された3つの条件を満たす数aとbを見つける方法

    整数 n が与えられたとき、以下の3つの条件をすべて満たす2つの数 a と b を見つけることを考えます。a mod b = 0(aがbで割り切れる)a * b > n(積がnより大きい)a / b < n(商がnより小さい)条件を満たすペアが存在しない場合は、-1を出力します。例として、n = 10 の場合、a = 90、b = 10 とすると、上記の3つの条件をすべて満たします。解法のアプローチこの問題は、次の手順で効率的に解くことができます。b = n と固定します。すると、a は残りの条件から導き出せます。a mod b = 0 となるのは、a が b の倍数のときです。a

  7. C++で二分探索を使ってソート済み配列内の一意の要素を見つける方法

    ソート済み配列から一度だけ現れる要素を検索するソート済みの配列Aがあるとします。すべての要素は2回ずつ現れますが、1つの要素だけが1回しか現れません。この一意の要素を見つける必要があります。例えば、配列が [1, 1, 3, 3, 4, 4, 5, 6, 6, 7, 7, 9, 9] の場合、求める要素は5です。この問題は、二分探索(バイナリサーチ)のアプローチを用いて効率的に解決できます。一意の要素より前の部分では、各要素の最初の出現位置が偶数インデックス(0, 2, 4, ...)に、2回目の出現位置が奇数インデックス(1, 3, 5, ...)にあります。しかし、一意の要素より後ろではこ

  8. C++で指定された条件下で変換を繰り返した後の最終的なXとYの値を求める方法

    2つの正整数XとYの初期値が与えられているとします。以下のルールに従って値を繰り返し更新し、最終的に残るXとYの値を求める問題を考えてみましょう。 処理のルール ステップ1: X = 0 かつ Y = 0 の場合は処理を終了します。そうでなければステップ2へ進みます。 ステップ2: X ≥ 2Y を満たす場合、X = X − 2Y としてステップ1へ戻ります。満たさない場合はステップ3へ進みます。 ステップ3: Y ≥ 2X を満たす場合、Y = Y − 2X としてステップ1へ戻ります。どちらの条件も満たさない場合は処理を終了します。 XとYは最大1018という非常に大きな値になり得

  9. C++で配列内の最小値・2番目・3番目に小さい要素を効率的に見つける方法

    n個の要素からなる配列が与えられたとき、その中から「1番目(最小)」「2番目」「3番目」に小さい要素を求めることを考えます。ここで、1番目の最小値は配列全体の最小値、2番目の最小値は1番目より大きい値の中で最も小さいもの、3番目の最小値は2番目より大きい値の中で最も小さいものを指します。この問題は、配列を一度だけ走査しながら、各要素について「1番目・2番目・3番目の最小値」の条件を順に判定していくことで解くことができます。アルゴリズムの考え方まず、1番目・2番目・3番目の最小値を表す変数 first、sec、third を用意し、それぞれ int 型の最大値 INT_MAX で初期化します。次

  10. NumPy配列の各文字列要素の長さを取得する方法

    この記事では、NumPy配列に格納された各文字列要素の長さを取得する方法を解説します。NumPyはPythonの数値計算用ライブラリであり、非常に強力な配列クラスを備えています。この配列クラスを利用することで、データを配列形式で効率的に格納・操作できます。文字列要素の長さを取得するには、主に以下の2つのアプローチがあります。方法1: np.vectorize(len) を使うnp.vectorize() 関数を使用すると、Pythonの組み込み関数 len をNumPy配列の各要素に一括して適用できます。ベクトル化された操作により、簡潔なコードで各文字列の長さを取得できます。コード例impor

  11. C++で指定された数より大きい次の完全平方数を求める方法

    整数 n が与えられたとき、n より大きい最小の完全平方数(ある整数の 2 乗で表される数)を求める問題を考えてみましょう。例えば、n = 1000 の場合、次の完全平方数は 32² = 1024 となります。 解法の考え方 この問題は、以下のシンプルな手順で解くことができます。 与えられた数 n の平方根を求める その値の小数点以下を切り捨てる(floor 処理) 切り捨てた値に 1 を加え、その 2 乗を計算して返す n の平方根の整数部分を r とすると、r² ≤ n が成り立つため、n より大きい次の完全平方数は (r + 1)² となります。 C++での実装例 #include

  12. C++で指定した数字dを含む数値をすべて検索する方法

    問題の概要数字 d と上限値 n が与えられたとき、0 から n までの範囲に存在する、数字 d を含むすべての数値を見つけることを考えます。例えば、n = 20、d = 3 の場合、該当する数値は [3, 13] の2つになります。また、n = 100、d = 3 の場合は、3、13、23、30〜39、43、53 といった具合に、3 が現れるすべての数値が該当します。解決のアプローチこの問題は、各数値を文字列に変換することでシンプルに解決できます。手順は以下のとおりです。1. 各数値を to_string() で文字列に変換する2. 変換した文字列の中に、対象の数字 d が含まれているかを

  13. C++で円の直径のもう一方の端点の座標を求める方法

    円の中心座標と円周上の1点の座標が分かっているとき、直径のもう一方の端点の座標を求める方法を解説します。中心の座標を (p, q)、与えられた円周上の点を (a, b) とすると、求めたい点を (x, y) と表せます。円の中心は直径の中点にあたるため、中点の公式を利用できます。数式で表すと次のようになります。(p, q) = ((a + x) / 2, (b + y) / 2)この式を変形すると、求めたい座標 (x, y) は次のように計算できます。x = 2p − a、y = 2q − b計算例例えば、中心が (3, 4)、円周上の点が (1, 2) の場合を考えてみましょう。x = 2

  14. C++で円柱の周囲長を求める方法

    円柱の直径と高さが与えられたとき、その周囲長を求めたいというケースがあります。しかし、周囲長は本来2次元図形の輪郭の長さを表す概念であるため、3次元の物体である円柱に対して直接求めることはできません。そこで考え方として、円柱の断面を展開して長方形として捉える方法を使います。円柱を横から見た断面は長方形になり、この長方形の2辺はそれぞれ「直径」と「高さ」に対応します。つまり、円柱の周囲長は次の式で計算できます。計算式p = (2 * d) + (2 * h)d: 円柱の直径h: 円柱の高さ直径の2倍と高さの2倍を足し合わせることで、展開された長方形の外周が求まります。C++での実装例以下は、直径

  15. C++で連結リストの先頭k個のノードの積を求める方法

    連結リストに複数の要素が格納されている場合を考えます。このとき、先頭からk個の要素の積(乗算結果)を求める必要があります。kの値もあらかじめ与えられているものとします。例えば、連結リストが [5, 7, 3, 5, 6, 9] で、k = 3 である場合、計算結果は 5 × 7 × 3 = 105 となります。アルゴリズムの考え方処理の手順は非常にシンプルです。連結リストを左(先頭)から順に走査し、現在のノードの値を結果変数に掛けていきます。結果変数の初期値は 1 に設定しておきます。k個の要素を処理し終えた時点で走査を終了し、その時点での積を返します。このアルゴリズムの計算量は O(k) で

  16. C++で連結リストの末尾N個のノードの積を求める方法

    連結リスト(リンクリスト)に複数の要素が格納されている場合を考えてみましょう。この記事では、リストの末尾からN個の要素を取り出し、それらの積(掛け算の結果)を求める方法を解説します。Nの値はあらかじめ与えられているものとします。例えば、連結リストが [5, 7, 3, 5, 6, 9] という構成で、n = 3 が与えられた場合、末尾の3つの要素は 5、6、9 となるため、計算結果は 5 × 6 × 9 = 270 になります。アルゴリズムの考え方この問題の解き方は非常にシンプルです。連結リストは基本的に先頭から順方向にしか辿れないため、スタック(stack)を活用します。手順は以下の通りです

  17. C++で配列内の最小値と2番目に小さい値を検索する方法

    n個の要素からなる配列が与えられたとき、その中で最も小さい要素(最小値)と、2番目に小さい要素を見つける必要があります。ここでいう「2番目に小さい要素」とは、最小値より大きい値の中で最小のものを指します。この問題は、配列の各要素を先頭から順に走査しながら、現時点での最小値と2番目に小さい値を適切に更新していくことで解決できます。アルゴリズムの考え方まず、最小値(first)と2番目に小さい値(sec)を、それぞれ int 型の最大値 INT_MAX で初期化します。次に配列を一巡するループの中で、以下の条件に従って値を更新していきます。現在の要素が最小値より小さい場合:2番目に小さい値を元の最

  18. C++で階乗に末尾のゼロが少なくともY個含まれる最小の数Xを求める方法

    この記事では、「X!(Xの階乗)の末尾に少なくともY個のゼロが含まれるような最小の数Xを求める」という問題を取り上げます。例えば、Y = 2の場合、答えはX = 10です。10! = 3,628,800であり、末尾にちょうど2個のゼロが含まれているためです。解法の考え方:二分探索この問題は二分探索(バイナリサーチ)を使うことで効率的に解けます。鍵となるのは次の事実です。N!の末尾のゼロの個数 = N!に含まれる約数5の個数末尾のゼロは10 = 2 × 5の積によって生じます。階乗の中では2の個数が常に5の個数より多いため、5が何回現れるかを数えればよいことになります。N!に含まれる5の個数は、

  19. Cプログラムで平方根を求める「バフシャリー近似」の計算方法を解説

    バフシャリー近似(Bakhshali approximation)とはバフシャリー近似は、完全平方数ではない数の平方根を求めるための計算手法です。この手法は古代インドの数学書「バフシャーリー写本」に記されていたことに由来し、バビロニア法(ニュートン法)の最初の2ステップに相当する近似計算として知られています。この記事では、まず関連する基本用語を確認し、その後、実際のプログラムでの実装方法までをわかりやすく解説します。基本用語のおさらい平方根ある数 x の平方根とは、y2 = x という条件を満たす数 y のことです。完全平方数完全平方数とは、その平方根が整数になる数のことです。例えば 16 は

  20. C++で数の累乗の重みを使って天秤を平衡させる方法

    問題文 ある数の累乗となる値を持つ重りを使用して、天秤を平衡させます。 問題の説明 この問題では、天秤式のはかりが与えられます。重さ T と、ある数 a の累乗となる値を持つ複数の重りが与えられます。これらの重りを使って、天秤の両皿を平衡させる必要があります。 このとき、成立すべき等式は次のとおりです。 T + (a の累乗) = (別の a の累乗) なお、各累乗の値に対応する重りはそれぞれ1個しか存在しないことに注意してください。 例 T = 12 : a = 4 この場合、次のようにして重りを平衡させることができます。 12 + 4 = 16 この問題を解くためには、T を

Total 5990 -コンピューター  FirstPage PreviousPage NextPage LastPage CurrentPage:92/300  20-コンピューター/Page Goto:1 86 87 88 89 90 91 92 93 94 95 96 97 98