C++

 Computer >> コンピューター >  >> プログラミング >> C++
  1. C++で1をちょうどK個含むバイナリ文字列の部分文字列を数える方法

    0と1の組み合わせからなるバイナリ文字列と整数値 k が与えられ、「1をちょうど k 個含む部分文字列」がいくつ作れるかを求めるのが本記事の目的です。入力例と出力例入力 − 文字列 str = 10000100000、k = 2出力 − 1をK個含むバイナリ文字列の部分文字列の数は − 6説明 − 与えられた文字列から作れる部分文字列には、1, 10, 100, 1000, 10000, 010, 100001, 10001, 1001, 101, 11, 1000010 などがあります。このうち「1をちょうど2個含む」条件を満たす部分文字列は6個存在します。入力 − 文字列 str = 10

  2. C++で一方の出現回数が他方の値以上となる配列内のペアを数える方法

    問題の概要 正の整数で構成された配列が与えられます。この問題のゴールは、配列 arr[] の要素から選んだペア (A, B) のうち、「A の出現回数が B 以上であり、かつ B の出現回数が A 以上である」という条件を満たすペアの総数を求めることです。 具体的な例を使って確認してみましょう。 入力 − int arr[] = { 3, 3, 3, 5, 5, 6, 6 } 出力 − 一方の出現回数が他方の値以上となる配列内のペアの個数 − 1 説明 − この配列では 3 がちょうど 3 回出現しているため、ペア (3, 3) が条件を満たします。有効なペアはこの 1 つだけなので、答えは

  3. C++で「pが配列にq回以上出現し、qがp回以上出現する」ペア(p, q)を数える方法

    問題の概要正の整数からなる配列が与えられます。この問題のゴールは、配列arr[]の要素から選んだペア(p, q)のうち、「pが配列内に少なくともq回出現し、かつqが配列内に少なくともp回出現する」という条件を満たすものの総数を求めることです。具体例を見ながら理解を深めましょう。入出力例例1入力: int arr[] = { 3, 3, 3, 5, 5, 6, 6 }出力: 条件を満たすペアの数 ― 1説明: 配列内で条件を満たす有効なペアは(3, 3)のみです。値3は配列内にちょうど3回出現しているためです。有効なペアはこの1つだけなので、答えは1になります。例2入力: int arr[] =

  4. 【C++】各文字を最大1回使用して別の文字列から形成できる文字列の個数を求める方法

    この記事では、2つの文字列 str_1 と str_2 が与えられたとき、str_1 の各文字を最大1回ずつ使用することで str_2 を完全に何個形成できるかを求める問題を解説します。つまり、str_1 に含まれる文字を重複して使わずに、str_2 が何回作れるかをカウントするのです。 入力 − str_1 = technical learning, str_2 = learning 出力 − 各文字を最大1回使用して別の文字列から形成できる文字列の数 − 1 説明 − str_2(learning)は str_1 の中でちょうど1回形成できます。したがって、カウントは1になります。 入力

  5. C++で要素を並べ替えて回文を作れる部分配列の個数を求める方法

    問題概要 整数要素からなる配列が与えられ、その配列から切り出せる部分配列のうち、要素を並べ替えることで回文(パリンドローム)を構成できるものの個数を求めるのが課題です。回文とは、先頭から読んでも末尾から読んでも同じ順序になる並びのことを指します。 ここで重要なのは、ある並びが回文にできる条件が「奇数回出現する要素の種類が高々1つ」であるという点です。この性質を利用すると、各要素の出現回数の偶奇をビットフラグとして管理し、XORで更新することで効率よく判定できます。 入力例1 入力 − int arr[] = { 3, 3, 1, 4, 2, 1, 5 } 出力 − 要素を並べ替えて回文を形成で

  6. C++で文字列を「ab」フリーにするために必要な操作回数を求めるアルゴリズム

    問題の概要「a」と「b」のみで構成される文字列が与えられ、その文字列から「ab」という並びをすべて取り除くために必要な操作回数を求めるのが課題です。使用できる操作は「文字列中の ab を bba に置き換える」ことだけです。まず文字列に「ab」が含まれているかどうかを確認し、含まれている場合は置き換えを繰り返して、最終的に「ab」が一切現れない状態(abフリー)にします。入出力例例1入力: str = ababaa出力: 文字列を「ab」フリーにするために必要な操作回数: 4説明: 文字列「ababaa」に対して、最初の「ab」を「bba」に置き換えると「bbaabaa」になります(1回目)。

  7. C++でバランスの取れた括弧シーケンスのペアを数える方法

    括弧だけで構成された複数の文字列が与えられ、それらを組み合わせて「バランスの取れた括弧シーケンス」となるペアが何組作れるかを計算するのが課題です。 括弧の並びが「バランスが取れている」とは、開き括弧「(」と閉じ括弧「)」の数が一致している状態を指します。また、一度ペアの形成に使用した文字列を、別のペアのために再び使用することはできません。 入力 − string paran[] = { )()()), (, )(, )(, ) } 出力 − バランスの取れた括弧シーケンスのペアの数: 1 説明 − 各文字列を順番に調べていきます。まず最初の要素「)()())」には、開き括弧が2つ、閉じ括弧が

  8. C++でグリッド内の指定方向に実行可能な移動回数をカウントする方法

    サイズ n × m のグリッドと、開始座標 (x, y) を表す変数が与えられます。さらに、グリッド内を移動するために使用できるステップのペア(例:(1,1)、(2,2) など)も与えられます。各ペアは、x 軸と y 軸方向に進む単位移動量を表します。ゴールは、境界 [1, n] × [1, m] の範囲内でグリッド内を移動できる合計ステップ数を求めることです。 たとえば、n = 5、m = 4、現在位置が (2, 2)、選択したステップが (1, -1) の場合を考えてみましょう。このステップを 1 回適用すると (3, 1) に移動できますが、もう 1 回適用すると (4, -1) となり

  9. C++で最初に減少し、その後増加する順列の個数を求める方法

    変数 num が与えられ、[1, num] の範囲内の数字を使った順列のうち、「最初に減少し、その後増加する」というパターンを持つ順列の個数を求めるのが目的です。例えば num=3 の場合、扱う数字は 1、2、3 であり、条件を満たす順列は [3, 1, 2] と [2, 1, 3] の 2 つです。すべての順列において、数字が「減少」から「増加」へと切り替わる位置は、最小値である 1 の配置場所によって決まります。1 の後ろでは数字が増加し始めるため、減少後に増加する順列を実現するには、1 が 2 番目から num−1 番目の間の位置に置かれる必要があります。もし 1 が先頭にあれば系列は完

  10. C++で合計が素数かつn未満となるペアの個数を数える方法

    正の整数 n が入力として与えられます。この記事の目的は、合計 (i + j) が素数であり、かつ n 未満となるペア (i, j) の個数を求めることです。ここで、i ≠ j かつ i, j ≥ 1 という条件を満たす必要があります。例として、n が 4 の場合を考えてみましょう。このとき条件を満たすペアは (1, 2) の 1 つだけです。1 + 2 = 3 は素数であり、4 未満だからです。また、1 と 2 はどちらも 1 以上の条件を満たしています。それでは、具体例を使って理解を深めましょう。入力 − n = 7出力 − 合計が素数かつ n 未満となるペアの数 − 3説明 − 該当する

  11. 【C++】i番目の文字が元の単語の(i-1)番目・i番目・(i+1)番目のいずれかである単語の個数を求める

    文字列 str[] が入力として与えられます。この問題の目的は、str[] と同じ長さを持ち、i番目の文字が元の単語の (i-1)番目・i番目・(i+1)番目のいずれかの文字で置き換えられた単語の個数を数えることです。 なお、先頭の文字は「i番目 または (i+1)番目」の文字から、末尾の文字は「(i-1)番目 または i番目」の文字から選ぶことになります。 具体例を使って理解していきましょう。 入力 − str[] = "TPP" 出力 − i番目の文字が元の単語の(i-1)番目・i番目・(i+1)番目のいずれかである単語の個数:4 説明 T を T(i番目)または 1つ

  12. 【C++】バイナリ行列をすべて0に変換するための最小操作回数を求めるプログラム

    問題概要0と1のみから構成されるバイナリ行列が与えられます。使用できる操作は「任意の1つのセルを選び、そのセル自身と上下左右の隣接するセル(存在する場合のみ)をすべて反転(0→1、1→0)する」というものです。この操作を繰り返して行列の全要素を0にするために必要な最小操作回数を求めてください。どのように操作してもすべて0にできない場合は -1 を返します。入力例{{0, 0}, {1, 0}}これは次のような2×2の行列です。0010出力3この場合、必要な操作回数は3回となります。解法のアプローチこの問題は、行列の状態をビットマスク(整数)として表現し、幅優先探索(BFS)で最短操作回数を求め

  13. C++で数値リストを並べ替えて最大の数を作成するプログラム

    問題の概要nums という数値のリストが与えられたとき、その順序を並べ替えて、可能な限り最大の数を作成し、文字列として返すことを考えます。例えば、nums = [20, 8, 85, 316] の場合、出力は 88531620 となります。解決のアプローチこの問題を解くためには、以下の手順に従います。配列 temp を定義しますnums の各要素 i に対して、文字列に変換して temp に挿入しますtemp を辞書順に基づいてソートします(2つの文字列 a, b を比較する際、「a + b」が「b + a」より大きいかどうかを判定します)temp の各文字列 s を順番に res に連結しま

  14. 【C++】全要素0の配列から目的の配列を構築するために必要な接尾辞インクリメント/デクリメント操作の回数を求める方法

    問題概要 正の整数を含むターゲット配列 arr[] が与えられます。この記事のゴールは、すべての要素が 0 の初期配列から出発し、「接尾辞(サフィックス)インクリメント/デクリメント操作」だけを使って、このターゲット配列 arr[] を構築するために必要な操作の総回数を求めることです。 任意のインデックス i を選択した場合、各操作は次のように定義されます。 接尾辞インクリメント操作: インデックス i から配列の末尾までのすべての要素に 1 を加算する。 接尾辞デクリメント操作: インデックス i から配列の末尾までのすべての要素から 1 を減算する。 例1で理解する 入力 − arr[

  15. C++で文字列に含まれるアナグラム部分文字列の総数を求める方法

    入力として文字列 str[] が与えられます。この記事の目的は、str[] 内に存在するアナグラム部分文字列の総数を数えることです。2つの文字列が互いにアナグラムであるとは、含まれる文字の種類と出現回数が完全に一致していることを指します。文字の並び順は異なっていても構いません。例えば、「abc」は「cba」や「bca」などのアナグラムです。それでは、具体例を見てみましょう。入力 − str[] = abccb出力 − アナグラム部分文字列の総数 − 4説明 − アナグラムとなる組み合わせは (b,b)、(c,c)、(bc,cb)、(bcc,ccb) の4つです。入力 − str = aaa出力

  16. 【C++】n個の点のうちm個が同一直線上にあるときに作れる三角形の数を求める方法

    問題の概要2次元平面上の点の総数を表す2つの変数 n と m が与えられます。このうち m 個の点は同一直線上(コリニア)に並んでいます。ここでの課題は、これら n 個の点から作ることができる三角形の数を求めることです。同一直線上の点(共線点)とは、同じ一本の直線上に乗っている点のことです。例えば下図では、点 A と点 B が同一の直線上に位置しています。考え方の基本まず、n=4(A, B, C, D)、m=2(A, B)という具体例で確認してみましょう。三角形の数は次の手順で計算できます。・4 点から任意の 3 点を選ぶ組み合わせ = 4C3・ただし、同一直線上の点だけでは三角形が成立しない

  17. C++で重複要素を含まない部分配列から形成されるペアの数を数える方法

    問題の概要 整数要素を含む配列 arr[] が与えられたとき、各部分配列がすべて異なる(重複しない)要素のみを持つという条件のもとで、その部分配列の要素から形成できるペアの総数を求めるのが目標です。 例えば、配列が [1, 2, 2, 3, 3] の場合、重複を含まない部分配列は [1, 2] と [2, 3] になります。これらから形成されるペアは (1, 2) と (2, 3) なので、ペアの総数は 2 となります。 入出力例で理解する 例 1 入力: arr[] = {1, 2, 5, 3} 出力: 重複要素なしの部分配列から形成されるペアの数:6 説明: すべて異なる要素を持つ部分

  18. C++で指定されたすべての文に共通して存在する単語の数を数える方法

    複数の文(文字列)が与えられたとき、すべての文に共通して存在する単語の数を数えるのがこの記事の目的です。注: 判定の対象となるのは、すべて小文字で構成された単語のみです。問題の具体例たとえば、次の3つの文があったとします。I am learning C languagelearning new things is easyKids are learning healthy habits3つの文すべてに登場するのは「learning」だけなので、答えは 1 になります。入力・出力例例1入力: The clothes were dry、All the kids were playing、Those

  19. 【C++】数値とその桁の合計との差がL以上となる数の個数を二分探索で求める方法

    問題概要整数 N と L が与えられます。1 以上 N 以下の数のうち、「その数自身から各桁の数字の合計を引いた差」が L 以上となる数の個数を求めるのが目的です。例えば、N=23、L=10 の場合、条件を満たす数は 4 個になります。23 - (2+3) = 1822 - (2+2) = 1821 - (2+1) = 1820 - (2+0) = 18これらの数はいずれも条件を満たしています。一方、19 - (1+9) = 9 となり L 未満であるため、19 以下の数(18、17、…、1)は条件を満たしません。入力例と出力例入力: N=30、L=19出力: 1説明: 条件を満たすのは 30

  20. C++でk個の等間隔点を持つ円における、指定した2点間の鈍角の数を求める方法

    円周上にK個の等間隔(等距離)の点が配置された円が与えられます。さらに、2つの点AとBも与えられます。この記事の目的は、これらの点を使って構成できる三角形のうち、内部に90度より大きい鈍角ACBを持つものの数を数えることです。点AとBは常に A < B を満たすものとします。下図の例では K=8、A=2、B=5 であり、∠ACB および ∠AC′B が鈍角になるような点は C と C′ の2つ存在します。具体例で理解しよう入力 − k=10、A=2、B=4出力 − 2つの指定点間にk個の等間隔点を持つ円における鈍角の数 − 1説明 − 条件を満たす点は C=3 のみです。入力 − k=1

Total 5990 -コンピューター  FirstPage PreviousPage NextPage LastPage CurrentPage:232/300  20-コンピューター/Page Goto:1 226 227 228 229 230 231 232 233 234 235 236 237 238