C++

 Computer >> コンピューター >  >> プログラミング >> C++
  1. C++で合計が0となる最長部分配列の長さを求めるプログラムの作成方法

    N個の整数からなる配列が与えられ、「合計が0となる最長の部分配列の長さ」を見つけることが課題です。もし合計が0となる部分配列が存在しない場合は「0」を返します。それでは、具体例を見てみましょう。 入力例1: N = 8 A[ ] = {15, -5, -1, 5, 1, 4 } 出力: 4 説明: 合計が0となる最長の部分配列は { -5, -1, 5, 1 } であり、その長さは4です。 入力例2: N = 5 A[ ] = {3, 2, 4, 8, -1} 出力: 0 説明: 合計が0となる部分配列がひとつも存在しないため、出力は「0」になります。 この問題の解き方 この問題を解くには複数

  2. C++でソートされていない整数配列から最大値と2番目に大きい値を見つけるプログラム

    問題の概要サイズNのソートされていない整数配列が与えられたとします。この課題は、配列内に存在する重複を除いた最大値と2番目に大きい値を見つけることです。配列には同じ要素が複数含まれる場合があるため、重複を除外した値だけを対象にしなければなりません。具体例を見てみましょう。入力1 −N = 5 A[ ] = { 2, 2, 1, 3, 4 }出力 −4 3説明 − 与えられた配列から、「4」が最大値、「3」が2番目に大きい値であることがわかります。入力2 −N = 4 A[ ] = { 1, 3, 3, 2 }出力 −3 2説明 − サイズ4の配列において、「3」が最大値、「2」が2番目に大きい

  3. C++で未ソートの整数配列から欠損している正の数を見つけるプログラムを作成する方法

    ここでは、ソートされていない整数の配列が与えられたと仮定します。課題は、範囲[0〜n]の中で、その配列に存在しない正の欠損数を見つけることです。具体的な例を見てみましょう。 入力例1 − N = 9 arr = [0,2,5,9,1,7,4,3,6] 出力 − 8 説明 − 与えられた未ソートの配列において、「8」だけが欠けている正の整数であるため、出力は「8」となります。 入力例2 − N = 1 arr = [0] 出力 − 1 説明 − この配列では「1」だけが欠けている正の整数であるため、出力は「1」となります。 この問題を解くためのアプローチ この問題にはいくつかの解き方があります

  4. C++で最頻出要素を求めるプログラムの作成方法:整数配列から最も多く現れる値を見つける

    サイズNの整数型配列が与えられたとき、その配列の中で最も頻繁に出現する要素(最頻出要素)を見つけることを考えましょう。例えば、以下のようなケースが挙げられます。入力例と出力例例1入力:N = 8 A[ ] = {1,2,4,3,3,1,1,5}出力:1解説: この配列の中で最も多く出現している数は「1」です。したがって、出力は「1」となります。例2入力:N = 6 A[ ] = {1,4,4,4,1,1}出力:1 または 4解説: この配列では「1」と「4」が同数(3回ずつ)出現しており、どちらも最頻出要素です。この場合、どちらか一方を返せば正解となります。問題を解くためのアプローチ与えられた

  5. C++で整数配列から上位K個の高頻度要素を見つけるプログラムの作成方法

    サイズNの整数配列とキーKが与えられたとき、配列の中で最も頻繁に出現する上位K個の要素を出力するのが本記事の課題です。まずは具体例で問題を確認しましょう。入出力例入力例1N = 6 K = 2 arr[ ] = {1, 1, 1, 2, 2, 3}出力1 2説明: 与えられた整数配列の中で、出現回数が多い上位K=2個の要素は {1, 2} です。入力例2N = 2 K = 1 arr[ ] = {1, 2}出力1説明: この配列では各要素が1回ずつしか出現しないため、上位K=1個の要素として先頭の {1} が返されます。この問題を解くためのアプローチ与えられた整数配列の中から、最も多く繰り返し

  6. 0と1のみで構成されたソート済み配列の遷移点をC++で効率的に求める方法

    0と1のみで構成されたソート済みの数値配列が与えられたとき、遷移点(トランジションポイント)を見つける問題を考えます。遷移点とは、配列内で最初に「1」が出現するインデックスのことです。入力例1N = 6 arr[ ] = {0,0,0,0,1,1}出力:4説明: 0と1で構成されたこの配列では、インデックス「4」の要素が最初の「1」になっているため、答えは4となります。入力例2N = 5 arr[ ] = {0,0,1,1,1}出力:2説明: この配列では、インデックス「2」の要素が最初の「1」であるため、2を返します。この問題の解き方与えられた整数配列の中から、最初に「1」が出現するインデッ

  7. C++で2つの文字列がアナグラムかどうかを判定する方法

    2つの文字列「a」と「b」が与えられたと仮定しましょう。この課題では、与えられた2つの文字列が互いにアナグラム(アナグラム:同じ文字を並べ替えてできる別の単語)であるかどうかを判定する必要があります。一方の文字列が、もう一方の文字列とまったく同じ文字(同じ種類・同じ個数)を含んでいるとき、その2つの文字列は互いにアナグラムであると言えます。 具体例 例1 入力: a = anagram b = gnarama 出力: True 解説: 文字列「gnarama」は、文字列「anagram」とまったく同じ文字を同じ個数だけ含んでいます。したがって、True を返します。 例2 入力: a =

  8. パンデジタル数とは?C++でパンデジタル数を判定する方法を解説

    パンデジタル数(Pandigital Number)とは パンデジタル数とは、数学において、ある基数(base)で表したとき、その基数で使用されるすべての数字が有効数字の中に少なくとも1回ずつ現れる整数のことです。 たとえば10進法の場合、0から9までの各数字をすべて含む整数がパンデジタル数となります。「1023456789」や、0〜9をちょうど1回ずつ使った「3816547290」などがその代表例です。 さらに、0をまったく含まずに、1から基数−1までの各数字がすべて現れるゼロレスパンデジタル数(zeroless pandigital number)と呼ばれる種類も存在します。 この問題を解

  9. C++で単方向リンクリストの先頭にノードを挿入するプログラムの書き方

    リンクリスト(連結リスト)とは、複数のノードが互いに接続された線形データ構造です。各ノードは「データフィールド」と「次のノードへのアドレス」という2つのフィールドで構成されています。ここでは、与えられた単方向リンクリストの先頭(ヘッド)に新しいノードを挿入する方法を解説します。入力例 − 1 → 2 → 3 → 4このリンクリストの先頭に「5」を挿入します。出力 − 5 → 1 → 2 → 3 → 4説明 − 先頭にノードを挿入した後、リンクリストは 5 → 1 → 2 → 3 → 4 と表示されます。問題を解くためのアプローチ最初に、複数のノードから構成されるリンクリストが与えられています。

  10. C++で解く最大消去値(Maximum Erasure Value)― スライディングウィンドウによる効率的な実装

    正の整数からなる配列が与えられたとき、すべての要素が一意(重複なし)である部分配列を1つだけ消去することを考えます。この操作で得られるスコアは、消去した部分配列の要素の総和です。ここでの目的は、ちょうど1つの部分配列を消去したときに得られる最大の合計値を返すことです。なお、配列 arr が a の部分配列であるとは、a[l], a[l+1], …, a[r] という形で表される連続した部分列と一致することを意味します。入力例と出力例例1arr[ ] = { 1, 2, 4, 5, 6 }出力:17説明: 最適な部分配列は {2, 4, 5, 6} です。その総和は 17 になります。例2arr

  11. C++でソースコードからコメントを削除する方法【実装例付き】

    C++のプログラムが入力として与えられたとき、そこからコメントをすべて取り除くことを考えます。「source」は文字列型ベクター(vector<string>)で、ソースコードのi行目がsource[i]に格納されています。これは、ソースコード全体の文字列を改行文字「\n」で分割した結果に相当します。 C++では、コメントとして次の2種類を記述できます。 行コメント: 文字列「//」で始まるコメント。同じ行の「//」以降の記述はプログラム上無視されます。 ブロックコメント(複数行コメント): 文字列「/*」で始まり「*/」で終わるコメント。この間に書かれた内容は、複数行にまたが

  12. C++で素数の配列から重複要素を削除するプログラムの実装方法

    サイズNの配列が与えられ、そのすべての要素が素数であるとします。この課題は、与えられた配列の中から重複する要素を見つけ出し、それらを削除することです。具体的な例を見てみましょう。入力例1 −N = 8 arr[ ] = { 2, 2, 2, 3, 3, 3, 5, 7 }出力 −2 3 5 7説明 − 与えられた素数の配列には「2」と「3」の重複が含まれています。これらの重複を削除すると、出力は 2 3 5 7 となります。入力例2 −N = 5 arr[ ] = { 3, 2, 7, 5, 5 }出力 −3 2 7 5説明 − 与えられた素数の配列には「5」の重複が含まれています。重複を削除

  13. C++で数値内のすべての0を5に置き換えるプログラムの作成方法

    問題の概要整数 N が与えられたとき、その数に含まれるすべての「0」を「5」に置き換えることを考えます。ただし、先頭にある「0」は有効な桁として扱われないため、置き換えの対象外とします。入力例 1N = 1007出力1557解説: 与えられた数には 2 つの「0」が含まれており、それぞれを「5」に置き換えると 1557 になります。入力例 2N = 00105出力155解説: 先頭の「0」は無視されるため、実際に処理されるのは 105 です。中央の「0」を「5」に置き換えると、出力は 155 になります。この問題を解くアプローチ与えられた数のすべての「0」を「5」に置き換えるには、数の末尾の桁

  14. C++で文字列内の母音を反転する方法|双方向ポインタ法によるO(n)実装

    文字列が与えられたとき、その中に含まれるすべての母音を反転させることが今回の課題です。まずは具体例から見ていきましょう。 入力例1 − a = tutor 出力 − totur 解説 − 文字列「tutor」の母音(u と o)を反転すると、「totur」という出力が得られます。 入力例2 − a = mathematics 出力 − mithametacs 解説 − 文字列「mathematics」の母音を反転すると、「mithametacs」という出力が得られます。 この問題を解くためのアプローチ 文字列が与えられたら、その中に含まれるすべての母音を反転させる必要があります。この問題には

  15. C++で単一連結リスト(片方向リンクリスト)から特定の要素を検索する方法

    単一連結リスト(片方向リンクリスト)が与えられたとき、その中から特定の要素を検索するのが本記事のテーマです。要素が見つかった場合は「Present」、見つからなかった場合は「Not Present」を出力します。 入力例1 1→ 2→ 3→ 4→ 5→ 6 「7」を検索する場合 出力 Not Present 解説: 与えられた単一連結リストの中に「7」は存在しないため、「Not Present」を返します。 入力例2 1→ 2→ 3→ 4→ 5 「2」を検索する場合 出力 Present 解説: 与えられ

  16. C++で0・1・2のみの配列をソートする方法|DNF(オランダ国旗)アルゴリズムを解説

    0、1、2 のみで構成された配列が与えられたとき、すべての「0」を先頭に、「1」をその次に、「2」を末尾に配置するように要素を並べ替えることを考えます。このとき、追加のメモリを使用せずに配列をインプレース(in-place)でソートする必要があります。この問題は、DNF(Dutch National Flag:オランダ国旗)ソートアルゴリズムを使うことで効率的に解くことができます。入出力の例例1入力:arr[ ] = {2, 0, 0, 1, 2, 1}出力:0 0 1 1 2 2説明: DNFソートアルゴリズムを用いて0・1・2を含む配列を並べ替えると、{0, 0, 1, 1, 2, 2}

  17. 【C++】ソート済み配列の各要素を2乗して昇順に出力する方法

    問題概要昇順にソートされた整数配列が与えられたとき、各要素を2乗した値を求め、その結果を再びソート順に出力するのが本記事の課題です。一見単純な処理ですが、負の数が含まれるため、単純に2乗するだけでは結果が昇順にならない点がポイントになります。入力例1 −arr[ ] = { -3,-1,0,1,4,6 };出力 −{0, 1, 1, 9, 16, 36}説明 − 与えられた配列 [-3, -1, 0, 1, 4, 6] の各要素を2乗すると [9, 1, 0, 1, 16, 36] となります。これを昇順に並べ替えると [0, 1, 1, 9, 16, 36] になります。入力例2 −arr[

  18. C++のstatic_assertとは?使い方と実例をわかりやすく解説

    static_assertは、プログラムのコンパイル時に条件を検証し、条件が満たされない場合にコンパイルエラーとしてメッセージを表示するC++の機能です。実行時ではなくコンパイル時に問題を検出できるため、テンプレートメタプログラミングなどで特に有用です。プログラムの実行結果を汚すことなく、開発者に明確なエラーメッセージを伝えられる点が大きな魅力です。C++11およびC++14では、static_assertを定義する際に必ずエラーメッセージを記述する必要がありました。しかし、C++17からはメッセージを省略してstatic_assertを呼び出すことが可能になりました。また、static_as

  19. C++で同じ積を持つタプルの総数を数える方法

    問題の概要互いに異なる要素を含む整数配列が与えられたとします。このとき、積が等しくなるタプルの総数を求めるのが課題です。タプル (a, b, c, d) は、a*b = c*d が成り立つ場合に有効とみなされます。具体的な例を見てみましょう。入力例:arr[]= {2,4,6,3}出力:8説明: 条件を満たすタプルの総数は8個です。(2,6,3,4)、(2,6,4,3)、(6,2,3,4)、(6,2,4,3)、(3,4,2,6)、(4,3,2,6)、(3,4,6,2)、(4,3,6,2) のいずれも a*b = c*d を満たしています。解決のためのアプローチこの問題を効率的に解く鍵となるのは

  20. C++で数値の指定した位置(インデックス)のビットを更新する方法

    本記事では、数値の指定されたインデックス(位置)にあるビットを更新する問題を解説します。ビット操作(Bit Manipulation)を活用することで、数値の任意のビットを効率的に書き換えることができます。 例えば、以下のような入力を考えてみましょう。 入力: N = 25 bit = 1 position = 2 出力: 29 解説: 入力値25は2進数で「11001」と表されます。ここで、位置インデックスは「2」、設定したいビット値は「1」です。指定位置のビットを置き換えると「11101」になり、これは10進数の「29」に相当します。 この問題へのアプローチ 数値の指定された位置(インデッ

Total 5990 -コンピューター  FirstPage PreviousPage NextPage LastPage CurrentPage:254/300  20-コンピューター/Page Goto:1 248 249 250 251 252 253 254 255 256 257 258 259 260