C++

 Computer >> コンピューター >  >> プログラミング >> C++
  1. 【C++】隣接する2つの要素を選ばない最大合計の求め方(動的計画法による解法)

    この問題では、配列 arr[] が与えられます。「どの2つの要素も元の配列で隣り合わない」という条件を満たしながら要素を選んだとき、合計の最大値をC++で求めるプログラムを作成しましょう。問題の概要配列の中から要素を選んで合計を作る際、選んだ要素どうしが隣接してはいけないという制約があります。この条件下で実現できる合計の最大値を求めるのが目的です。具体例を見てみましょう。入力arr[] = {5, 1, 3, 7, 9, 2, 5}出力22説明インデックス0から1つおきに要素を選んだ場合 : 5 + 3 + 9 + 5 = 22 インデックス1から1つおきに要素を選んだ場合 : 1 + 7 +

  2. C++で行列の任意の部分行列から得られる最大トレースを求める方法

    本記事では、二次元配列 arr[][] が与えられたとき、その中から選べる任意の部分行列について考えられる最大トレースを求めるC++プログラムを紹介します。問題の概要トレースとは、正方行列の主対角線上の要素をすべて足し合わせた値のことです。この問題では、与えられた行列から取り出せるすべての部分行列を対象に、そのトレースの最大値を見つける必要があります。入力例arr[][] = {{-2, 5, 3}, { 1, 6, 2}, { 4, 3, 9}}出力例15解説対象となる部分行列: {6, 2} {3, 9}この

  3. C++で停車可能な最大列車数を求める方法

    問題概要 この問題では、駅にあるプラットホームの数 N(各プラットホームは2本の線路を持つ)と、到着時刻・出発時刻付きの T 本の列車の情報が与えられます。各列車は特定のプラットホームに停車します。私たちの課題は、C++を用いて、停車扱いが可能な列車の最大数を求めるプログラムを作成することです。 具体例を使って問題を確認しましょう。 入力 N = 3, T = 5 Trains = {{0915, 0930, 2}, {0930, 0945, 1}, {0930, 1200, 1}, {0910, 0925, 3}, {0940, 1015, 1}} 出力 4 説明 列車の運行スケジュールは以

  4. 【C++】m回の範囲加算操作後の配列の最大値を求めるアルゴリズム

    この記事では、0で初期化されたN個の要素を持つ配列arr[]に対して、m回の範囲加算(インクリメント)操作を実行した後の、配列内の最大値を求めるプログラムをC++で作成します。 問題の概要 配列に対して、次のような形式の範囲加算操作をm回実行します。 update[L, R, K] = 区間[L, R]に含まれるすべての要素に値Kを加算する m回の操作をすべて完了した後、配列の中で最も大きな値を持つ要素を見つけることが目的です。 入力例 N = 6, m = 4 Update[][] = {{1, 4, 12}, {0, 3, 5}, {1, 5, 7}, {3, 5, 10}} 出力例 34

  5. 【C++】配列内にK以上の要素がK個以上存在するような最大値Kを求める方法

    この問題では、整数型の配列 arr が与えられ、「配列内に K 以上の要素が少なくとも K 個存在する」という条件を満たす最大値 K を求めるプログラムを C++ で作成します。問題の説明求めるのは、配列内の「K 以上の値を持つ要素」の個数が K 個以上になるような値 K のうち、最大のものです。具体例で問題を確認しよう入力: arr[] = {3, 5, 1, 7, 6, 6, 4, 8}出力: 5説明: 配列内で 5 以上の要素は「5, 6, 6, 7, 8」の 5 個存在するため、K = 5 が条件を満たします。解決アプローチこの問題に対するシンプルかつ効果的な解法は、まず配列を昇順にソ

  6. C++で階乗が計算できる整数の最大値を見つける方法

    この記事では、C++の環境で階乗(factorial)の計算が可能な整数の最大値を求めるプログラムの作成方法について解説します。ある数の階乗とは、その数までのすべての整数を掛け合わせた値であり、非常に大きな数になります。C++の組み込みデータ型では、扱える数値の大きさに上限があるため、どこまでの階乗が計算できるのか、その限界を調べる必要があります。解決のアプローチここで利用するのは、データ型のオーバーフローの性質です。符号付き整数型では、格納できる最大値を超えると、値が負の数として返される(オーバーフローする)という特性があります。この挙動を検出することで、階乗の計算限界を特定できます。使用す

  7. 【C++】最大重み差を計算するプログラムの実装方法

    この記事では、配列 arr[] と数値 M が与えられたときに、C++ で最大重み差を計算するプログラムの作成方法について解説します。 問題の概要 配列から M 個の要素を選び、選んだ要素の合計と残りの要素の合計との絶対差が最大になるような組み合わせを求めます。 具体例を使って問題を確認しましょう。 入力: arr[] = {3, 1, 6, 9, 4}、M = 3 出力: 15 解説 この例では、4、6、9 の 3 つの要素を選びます。選んだ要素の合計は 19 となり、残りの要素(3 と 1)の合計との絶対差は次のように計算できます。 |19 − 4| = 15 解決アプロー

  8. 【C++】整数を4分割するかそのまま使うかで最大値を求めるアルゴリズム

    このチュートリアルでは、整数を再帰的に分割するか、そのままの値を採用するかを選択して最大値を求めるプログラムをC++で解説します。具体的には、ある整数 n が与えられたとき、以下の漸化式に従って最大値を計算します。数を2・3・4・5で割った各部分の結果を合計する場合と、そのままの値 n を採用する場合を比較し、大きい方を選びます。F(n) = max( (F(n/2) + F(n/3) + F(n/4) + F(n/5)), n )アルゴリズムのポイント単純な再帰で実装すると、同じ値を何度も計算することになり非効率です。そこで本実装では、ボトムアップ方式の動的計画法(DP)を用いて、0からnま

  9. C++で繰り返し文字列内の文字を比較するクエリ処理を実装する方法

    この記事では、文字列 str と、2つの値 a と b のペアからなる Q 個のクエリが与えられたとき、「無限に繰り返される文字列」として扱った場合に指定位置の文字同士が一致しているかどうかを判定するプログラムを、C++ で作成する方法を解説します。 問題の概要 各クエリに対して、指定された2つのインデックス a と b における文字が同じであるかを確認し、その結果を返す必要があります。重要なポイントは、与えられた文字列が無限に繰り返されるものとして扱う点です。そのため、インデックスが文字列の長さを超えている場合でも、正しく対応する文字と比較できるようにしなければなりません。 具体例で確認

  10. C++プログラム:数をそのまま使うか分割するかの選択による最大値の求め方

    この記事では、整数Nが与えられたとき、その数を「そのままの値として使う」か「分割する」かを選択して得られる最大値を求めるC++プログラムの作成方法を解説します。 問題の概要 与えられた数Nに対して、次の2つの選択肢のうち、より大きい方の値を採用します。 そのまま採用する:N自体の値を使用する 分割する:Nを2、3、4、5で割ったそれぞれの値に対する関数の結果の合計を使用する。つまり F(N/2) + F(N/3) + F(N/4) + F(N/5) したがって、F(N)は次のように定義できます。 F(N) = max(N, F(N/2) + F(N/3) + F(N/4) + F(N/5

  11. 【C++】アクセスするたびに最大値が減少する配列から最大値の合計を求める方法

    この記事では、整数型の配列 arr[] と整数 M が与えられたとき、「アクセスするたびに最大値が1ずつ減少する」という条件のもとで、配列から取得できる最大値の合計を求めるプログラムをC++で作成します。 問題の説明 配列の中から最大要素を見つけ出し、それを取り出すたびに値を -1 して戻すという操作を M 回繰り返します。そして、M 回の取得で得られた値の合計を出力します。 具体例で問題を確認しましょう。 入力: arr[] = {3, 6, 8, 9}、M = 2 出力: 17 解説 1回目の操作: 最大値は 9。合計 = 9。更新後の配列 = {3, 6, 8, 8} 2回目の操作: 最

  12. C++の範囲ベースforループ(Range-based for)を徹底解説!構文から実例まで

    範囲ベースforループ(range-based for loop)は、C++11で標準に追加された機能で、従来のforループをより簡潔に記述できる形式です。コンテナ内の要素を先頭から末尾まで順番に処理する際に活躍します。本記事では、その構文や使い方、メリット・デメリット、具体的なコード例まで詳しく解説します。 基本構文 for( range-declaration : range-expression ) loop statement range-declaration(範囲宣言) ― range-expressionの要素と同じ型の変数宣言です。通常はautoキーワードを使うことで、要素の型

  13. C++プログラムがクラッシュする5つの主な原因をサンプルコード付きで解説

    C++プログラムの異常動作は、しばしばプログラムのクラッシュ(異常終了)につながります。「Segmentation fault(セグメンテーション違反)」「Aborted」「Floating point exception(浮動小数点例外)」といったエラーメッセージを目にしたことがある方も多いのではないでしょうか。本記事では、C++プログラムがクラッシュする代表的な原因を、サンプルコードと実行結果とともにわかりやすく解説します。1. 例外(Exceptions)C++における例外とは、プログラムが異常な状態に遭遇した際に発生する反応のことです。例外をtry-catchブロックで適切にハンドリン

  14. C++でクラスオブジェクトをファイルに読み書きする方法(fstreamの使い方)

    C++の標準入出力ライブラリ「iostream」には、標準入力からデータを受け取るcinと、標準出力へデータを出力するcoutという2つのストリームが用意されています。本記事では、ファイルからクラスオブジェクトへデータを読み込む方法、およびクラスオブジェクトのデータをファイルへ書き出す方法について解説します。 ファイルの読み書きを行うには、もう一つの標準ライブラリ<fstream>を使用します。fstreamライブラリの主要な3つのデータ型は以下の通りです。 ifstream:入力ファイルストリームを表し、ファイルから情報を読み込みます。 ofstream:出力ファイルストリーム

  15. C++のSTL配列(std::array)で使える関係演算子の使い方を徹底解説

    C++には、同じ型のオペランド同士を比較するための関係演算子(比較演算子)が6種類用意されています。具体的には、>、<、==、<=、>=、!= の6つです。本記事では、C++のSTL配列(std::array)におけるこれらの関係演算子の動作について詳しく解説します。STL配列の比較で中心的な役割を果たすのは、2つの配列コンテナ間の等価比較(==)と小なり比較(<)の2つです。 等価比較演算子(==)の動作 等価比較(==)では、演算子の左辺(L.H.S)と右辺(R.H.S)にある両方の配列の要素を、先頭要素から順番に比較していきます。そして、最初に不一致が見つか

  16. C++で点を別の点を中心として回転させる方法

    原点を中心とした点の回転 点Xを原点を中心として角度θだけ反時計回りに回転させるには、以下の式を使用します。 原点を中心にθだけ反時計回りにXを回転する式: X * polar(1.0, θ) ここで使われている polar 関数は、<complex> ヘッダーファイルで定義されている複素数用の関数で、大きさ(絶対値)と位相角から複素数を生成するために使用されます。polar(mag, angle) を呼び出すと、対応する複素数が返されます。複素数を平面上の点として扱うことで、回転のような幾何学的な操作を簡潔に記述できるのがポイントです。 点Yを中心とした点Xの回転 ある点を別の

  17. C++のround()関数とは?使い方とオーバーロードの種類をわかりやすく解説

    C++のround()関数は、引数として渡されたdouble型・float型・long double型の値を、最も近い整数値に四捨五入するための関数です。C++プログラムでround()関数を使用する際は、ヘッダーファイル「<cmath>」または「<tgmath>」をインクルードします。 round()関数のオーバーロード(C++11以降) C++11標準以降では、round()関数には以下のようなオーバーロードが定義されています。 double round( double D ) float round( float F ) long double round( l

  18. C++の「3つのルール(Rule of Three)」とは?例外安全なコードを書くための基本を解説

    C++の「3つのルール(Rule of Three)」とは「3つのルール(Rule of Three)」は、例外安全なコードを構築するためのC++の経験則のひとつです。このルールは、例外による不具合を防ぐために、クラスのデフォルトメンバーをどのように扱うべきかを規定しています。3つのルールは「ビッグスリーの法則(Law of Big Three)」あるいは「The Big Three」としても知られており、次の3つの特殊メンバー関数のうち、いずれか1つでもクラス内で定義する場合は、3つすべてを明示的に定義すべきであると定めています。デストラクタ(destructor)コピーコンストラクタ(co

  19. 【C++ STL】setのoperator=(代入演算子)の使い方を徹底解説

    C++ STLのsetコンテナにおけるoperator=は、あるsetの中身を別のsetへコピー(またはムーブ)するために使用される代入演算子です。通常の「=」による代入と同じ感覚で利用でき、この関数には以下の3つのオーバーロードされた形式が用意されています。 1. コピー版:set& operator=(const set& s1) set s1 のすべての要素を、呼び出し元の別のsetへコピーします。引数には同じ型のsetを渡します。 使用例: set s1 = s2; 2. ムーブ版:set& operator=(set&& s1) set s1

  20. C++におけるペア(pair)のセット(set)の使い方

    C++のsetとpairの基本 C++のsetは連想コンテナの一種で、重複しない一意な要素のみを格納します。一度セットに追加された要素は変更できず、内容を変えたい場合は一度削除してから再び追加する必要があります。 一方、pairは<utility>ヘッダーで定義された構造体で、2つの値をひとまとめに扱うために使用します。pairの2つの値は、同じ型でも異なる型でも問題ありません。各値にはfirstとsecondというメンバーを通じて個別にアクセスできます。 pairの要素の順序は固定されており(first、second)、この特性により、異なる型の2つの値を1つの単位として組み合わ

Total 5990 -コンピューター  FirstPage PreviousPage NextPage LastPage CurrentPage:198/300  20-コンピューター/Page Goto:1 192 193 194 195 196 197 198 199 200 201 202 203 204