C++

 Computer >> コンピューター >  >> プログラミング >> C++
  1. C++で指定インデックス範囲内の回文部分文字列の個数を求める方法

    文字列と、startからendまでの範囲が与えられたとき、その範囲内に存在する回文(パリンドローム)部分文字列の個数を計算するのが本記事のテーマです。回文とは、「nitin」や「aba」のように、前から読んでも後ろから読んでも同じになる文字列のことを指します。 例 入力 − InputString = cccaabbbdee、start = 2、end = 6 出力 − 指定インデックス範囲内の回文部分文字列の個数:7 説明 − 文字列と範囲が与えられているため、startポインタの位置2(c)からendポインタの位置6(b)まで文字列を走査します。対象となる部分文字列は「caabb」で

  2. C++で行列内の指定されたスコアに到達する方法の数を数える

    負でない数を要素として含む正方行列 matrix[][] と、変数 score が与えられます。目標は、matrix[][] の要素を加算しながら指定されたスコアに到達する方法の数を数えることです。ただし、許可される移動は「右移動」と「下移動」のみです。 開始地点は matrix[0][0] であり、そこから移動できるのは matrix[0][1](右移動)または matrix[1][0](下移動)のいずれかです。通過した要素の値を順に加算し、合計が score と一致するようにします。 例を使って理解しよう 例1 入力 − matrix[row][col] = { {1, 1}, {1,

  3. C++で迷路内の目的地に到達する経路の数を数える方法

    ```html 問題の概要迷路は行 × 列(row × col)の行列として表現され、障害物のあるセルは -1、通行可能なセルには -1 以外の値が格納されています。ゴールは、左上のセル arr[0][0] から出発し、右下のセル arr[row-1][col-1] に到達することです。ただし、許される移動は次の2方向のみです。右への移動: arr[i][j] → arr[i][j+1]下への移動: arr[i][j] → arr[i+1][j]例で理解しよう入力 − arr[row][col] = {{0, 0, 0}, {-1, -1, 0}, {0, 0, 0}}出力 − 迷路で目的地に

  4. C++で範囲内の数値のうち、その数字とqをかけた積に共通する数字がないものを数える方法

    この記事では、範囲を表す2つの整数 start と end、および整数 q が入力として与えられたとき、範囲内の数値のうち「その数値自身の数字と、qをかけた積の数字に共通する数字が1つも存在しない」ものの個数を求める方法を解説します。例えば、数値が 5 で q が 3 の場合、積は 15 となります。5 と 15 はどちらも数字「5」を含むため、共通する数字があります。一方、数値が 2 で q が 5 の場合、積は 10 となります。2 と 10 には共通する数字がないため、条件を満たします。例で理解しよう入力例1start = 5, end = 10, q = 2出力: 条件を満たす数値の個

  5. 【C++】偶数位と奇数位の桁の合計の差が素数となる範囲内の数をカウントする方法

    2つの整数 start と end が範囲として与えられます。この範囲 [start, end] に含まれる数の中から、「偶数位の桁の合計」と「奇数位の桁の合計」の差が素数になっている数の個数を求めるのが目的です。つまり、(偶数位の桁の合計) − (奇数位の桁の合計) = 素数 を満たす数を数えます。具体例で理解しよう例1入力: start = 230, end = 270出力: 偶数位と奇数位の桁の合計の差が素数となる範囲内の数の個数: 6説明: 230〜270 の範囲で条件を満たす数は以下の通りです。240 (4−2=2)、250 (5−2=3)、251 (5−3=2)、261 (6−3=

  6. C++で特定の増殖率におけるn秒後のa・b・cの個数を求める方法

    3つの数値「a」「b」「c」を入力として与え、n秒後のそれぞれの個数を求めるのがこの問題のゴールです。増殖(変化)のルールは以下のとおりです。 各aは2秒ごとにbへ変化する 各bは5秒ごとにcへ変化する 各cは12秒ごとに2つのaへ変化する 例を使って理解しよう 例1 入力 − n_seconds = 62、a = 1、b = 1、c = 1 出力 − 指定された増殖率におけるn秒後のaの個数:0 指定された増殖率におけるn秒後のbの個数:33 指定された増殖率におけるn秒後のcの個数:1 説明 − 60秒経過した時点で、aは32、bは0、cは0になります。 さらに2秒経過すると、すべて

  7. 【C++】Nの各桁の数字からASCII値を構成できるアルファベットの個数を求める方法

    正の整数を格納したlong型変数が入力として与えられます。この問題の目的は、入力された数値の各桁の数字を組み合わせて、英字アルファベットのASCII値を構成できる個数を求めることです。 数値から任意の2つの桁を選び、それらを並べることで英字アルファベットのASCII値を作ります。大文字A〜ZのASCII値は65〜90、小文字a〜zのASCII値は97〜122です。 対象となるアルファベットの総数は26+26=52個となります。 例で理解しよう 入力 − N_digits = 163465 出力 − Nの桁からASCII値を形成できるアルファベットの数: 2 説明 − 163465に含まれるAS

  8. C++で隣接セルの数を加算するとフィボナッチ数になる行列内のセルの個数を求める方法

    問題概要row × col のサイズを持つ行列 matrix[ ][ ] が与えられます。この問題のゴールは、次の条件を満たす行列内のセルの個数を求めることです。セルの値 matrix[i][j] + そのセルに隣接するセルの数 = フィボナッチ数フィボナッチ数列は次のとおりです。0, 1, 1, 2, 3, 5, 8, 13, 21, 34 ……例を使って理解しよう入力matrix[row][col] = {{1, 4, 1}, {2, 0, 1}, {5, 1, 1}}出力隣接セルの数を加算するとフィボナッチ数になる行列内のセルの個数:4解説    

  9. C++でNを1・3・4の和で表現する組み合わせの総数を求める方法(動的計画法)

    正の整数 N が入力として与えられます。この記事では、N を「1」「3」「4」のみの合計として表現する方法が何通りあるかを求めるプログラムを紹介します。例えば N = 4 の場合、「1+1+1+1」「3+1」「1+3」「4」の4通りの表し方があるため、答えは 4 となります。具体例で理解しよう例1入力: N = 5出力: N を 1、3、4 の和で表現する異なる方法の数:6解説: 5 は以下のように表現できます。1+1+1+1+11+3+13+1+11+1+34+11+4例2入力: N = 6出力: N を 1、3、4 の和で表現する異なる方法の数:9解説: 6 は以下のように表現できます。1

  10. C++で桁の合計が指定した合計に一致するn桁の数の個数を求める方法

    正の整数として桁数と合計が与えられます。目的は、各桁の数字の合計が入力された合計と等しくなるようなd桁の数をすべて数えることです。なお、先頭に0が付く数(リーディングゼロを含む数)はd桁の数としては扱いません。 制約は、桁数が1〜100、合計が1〜500です。 例で理解しよう 例1 入力: digits = 3, digi_sum = 3 出力: 桁の合計が指定された合計に等しいn桁の数の個数:6 説明: 各桁の合計が3となる3桁の数は、次の6つです。 102、111、120、201、210、300 例2 入力: digits = 4, digi_sum = 2 出力: 桁の合計が指定された

  11. 【C++】最初の桁と最後の桁が一致する数値を範囲内から数える方法

    start から end までの数値の範囲が与えられたとき、その範囲 [start, end] 内に含まれる「最初の桁(先頭の桁)と最後の桁(一の位)が一致する」数値の個数を求めるのが本記事の目的です。なお、1桁の数値は先頭と末尾の桁が必然的に同じになるため、範囲内に存在すればすべてカウント対象となります。例で理解しよう入力: start = 100, end = 200出力: 最初の桁と最後の桁が一致する範囲内の数値の個数: 10説明: 該当する数値は以下の10個です。101, 111, 121, 131, 141, 151, 161, 171, 181, 191入力: start = 1,

  12. C++で合計がkで割り切れる部分行列を数える方法

    行×列のサイズを持つ行列が入力として与えられたとき、matrix[row][col] 内に存在するすべての部分行列のうち、その要素の合計が整数 k で割り切れるものを数えるのが本記事の目標です。例えば、行列が mat[3][3]、k が 4 の場合、該当する部分行列は以下のように表されます。具体例で理解しよう入力 - matrix[3][3] = { {1,1,1}, {2,2,2}, {3,3,3} }  k=4出力 - 合計が k で割り切れる部分行列の数:4説明 - 該当する部分行列は上図のように示されます。入力 - matrix[3][3] = { {1,1,1}, {2,2,2},

  13. C++で指定した桁和を持つN以下の数をカウントする方法

    数字からなる文字列 str と目標の合計値 total が入力として与えられます。この記事では、str で表される数 N 以下の整数のうち、各桁の数字の合計が total と一致するものの個数を求める方法を解説します。具体例で理解しよう例 1入力: N=110、sum=5出力: 指定した桁和を持つ N 以下の数の個数: 7説明: 110 以下で桁の合計が 5 になる数は次の通りです。5, 14, 23, 32, 41, 50, 104例 2入力: N=1000、sum=3出力: 指定した桁和を持つ N 以下の数の個数: 10説明: 1000 以下で桁の合計が 3 になる数は次の通りです。3,

  14. C++で m + sum(m) + sum(sum(m)) = N を満たす数の個数を求める方法

    入力として整数 N が与えられます。この記事の目的は、次の条件を満たす N 以下の数 m の個数を求めることです。ここで N ≤ 109 とします。m + sum(m) + sum(sum(m)) = N ここで、sum(m) は m の各桁の合計(桁和)を表します。例えば、m が 137 の場合、sum(m) = 1 + 3 + 7 = 11 となり、sum(sum(m)) = sum(11) = 1 + 1 = 2 となります。例で理解しよう例 1入力: N = 27出力: m + sum(m) + sum(sum(m)) = N を満たす数の個数: 3説明: 該当する数は以下の 3 つで

  15. C++でBFS(幅優先探索)を使って木構造の指定レベルにあるノード数を数える方法

    木構造のノードを頂点として含む無向グラフが与えられたとき、BFS(幅優先探索)アルゴリズムを用いて、指定されたレベルに存在するノードの数を求めるのが本記事の目的です。BFSアルゴリズムとはBFSは、グラフや木をレベル(階層)ごとに走査していくアルゴリズムです。レベル0のノードから探索を開始し、まずそのノードに直接接続されているレベル1のすべてのノードを訪問し、続いて次のレベルのノードを順番に走査していきます。現在のレベルのノードを横方向(同じ階層内)に走査する。同様の手順で、次のレベルのノードを走査する。具体例で理解しよう例1:入力:level = 2出力:BFSを用いて指定レベルのノード数を

  16. C++で素因数のべき乗のGCDが1となる範囲内の数を数える方法

    正の整数の範囲を表す2つの数 start と end が与えられます。この問題の目標は、範囲 [start, end] に含まれる数のうち、素因数分解した際のすべての素因数の指数(べき乗)の最大公約数(GCD)が 1 となる数の個数を求めることです。ある数が 2p × 3q × 5r … のように素因数分解できる場合、指数 p, q, r … のGCDが 1 でなければなりません。例で理解しよう入力例:start = 1, end = 10出力: 素因数のべき乗のGCDが1となる範囲内の数の個数: 6説明: 該当する数は次のとおりです。2(21)、3(31)、5(51)、7(71)、8(23)

  17. C++で厳密に増加するサブ配列を数える方法を解説

    整数要素を含む配列が与えられたとき、その配列から取り出せるすべてのサブ配列(部分配列)の中で、「厳密に増加している」(すべての要素が直前の要素より大きい)ものの個数を求めるのがこの問題の目的です。条件を満たさないサブ配列は候補から除外します。ここでのポイントは、サブ配列の先頭2つの要素(0番目と1番目)の時点ですでに増加していない場合、それ以降のチェックを打ち切ることで無駄な計算を省くという効率的なアプローチです。C++での例入力: int a[] = {1, 7, 5}出力: 厳密に増加するサブ配列の数は 1説明: 考えられるサブ配列は {1,7,5}、{1,7}、{7,5} の3つですが、

  18. 文字列中のアナグラム出現回数をカウントするアルゴリズムとC++・Javaでの実装例

    テキストストリーム(文字列)と1つの単語が入力として与えられ、その単語のアナグラムがテキストストリームの中に何回出現するかを求めるのが本記事のテーマです。アナグラムとは、単語を構成する文字を並べ替えてできる別の単語やフレーズのことを指します。有名な例としては、文「New York Times」のアナグラムとして「Monkeys write」が挙げられます。 具体例 例1 入力: 文字列 = 「workitwrokoffowkr」、単語 = 「work」 出力: 文字列中のアナグラムの出現回数:3 解説: 「work」のアナグラムには work、wrok、rowk、owkr などがあります。与え

  19. C++で文字列に含まれる重ならない回文部分文字列のペア数を求める方法

    問題の概要文字列が入力として与えられ、その中から重なり合わない(オーバーラップしない)回文部分文字列のペアが何通り作れるかを数えるのが課題です。ここでは、部分文字列 str[i..j] が回文であれば arr[i][j] を true、そうでなければ false とする2次元の真偽値テーブルを利用します。文字列から部分文字列の組み合わせを取り出し、各ペアが条件を満たすかどうかを確認していきます。例で理解しよう入力:ABC出力:重ならない回文部分文字列のペア数は 3説明:考えられる組み合わせは (A)(B)(C)、(A)(BC)、(AB)(C)、(ABC) となります。入力:ABCD出力:重なら

  20. 【C++】1文字削除後に2つの文字列のいずれかと一致する文字列の数を求める方法

    この記事では、2つの異なる文字列 s1 と s2 が与えられたときに、それらの一意な文字を組み合わせて文字列 S を作成し、S から1文字を削除した結果が s1 または s2 のいずれかと一致するパターンの数を求める方法を解説します。例例1入力: S1 = utter、S2 = butter出力: 1回の削除後に2つの文字列のいずれかと一致する文字列の数: 1説明: 文字列 S として「butter」を作成します。S から文字「b」を削除すると「utter」になり、これは s1 と一致します。したがって、カウントは1です。例2入力: S1 = fat、S2 = rat出力: 1回の削除後に2つ

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