C++

 Computer >> コンピューター >  >> プログラミング >> C++
  1. C++で階乗の桁数を数える方法をわかりやすく解説

    本記事では、整数値が与えられたときに、まずその数の階乗を計算し、次にその結果に含まれる桁の総数を求める方法について解説します。階乗とは何か階乗とは、ある数から1ずつ減らしながらすべての値を掛け合わせて計算される数です。記号は「!」で表され、0!、1!、2!、3!、5!などのように書きます。なお、0!と1!は常に1となります。例:2の階乗 = 2 × (2−1) = 2 × 1 = 2  3の階乗 = 3 × (3−1) × (2−1) = 3 × 2 × 1 = 6具体例入力 − factorial(6)出力 − factorial(6)の桁数:3解説 − 6の階乗は720であり、3桁の数字で

  2. 【C++】O(log n)時間・O(1)空間で実現!指定範囲内のフィボナッチ数の個数を数える方法

    開始値と終了値からなる範囲が与えられたとき、その範囲内に存在するフィボナッチ数の総個数を、O(log n)時間・O(1)空間という制約のもとで計算する方法を解説します。フィボナッチ数とはフィボナッチ数とは、「フィボナッチ数列」と呼ばれる数列を構成する数のことであり、各項は直前の2つの項の和として定義されます。具体的には、f(0) = 0、f(1) = 1 と固定されており、計算は3番目の項から始まります。数列を計算するための公式は以下の通りです。Fn = Fn-1 + Fn-2ここで、F0 = 0、F1 = 1たとえば、次のような入出力が考えられます。入力 − start = 6、last =

  3. C++で2つの数の共通素因数を求める方法

    2つの整数 x と y が与えられ、これらの数に共通する素因数を求めることを考えます。共通素因数を見つけるには、まず2つの数の共通の約数を求め、その中から素数であるものを特定します。効率的に求めるには、最大公約数(GCD)を活用するのがポイントです。 具体例 入力 − x = 10、y = 20 出力 − 2つの数の共通素因数:2 5 説明 − 10と20の共通素因数は2と5のみです。 入力 − x = 34、y = 12 出力 − 2つの数の共通素因数:2 説明 − 34と12の共通素因数は2のみです。 アルゴリズムの流れ 2つの数 x と y の値を入力します。 共通素因数を求めるための

  4. C++で最小の素因数が指定した素数となる10^6未満の数を数える方法

    ある素数 num が与えられたとき、最小の素因数が num と一致するような 106 未満のすべての数の個数を求めるのがこの記事のテーマです。 この問題は、エラトステネスのふるいを少し工夫するだけで効率的に解くことができます。通常のふるいは素数を列挙するために使われますが、合成数に初めて「素数ではない」という印を付ける際に使用した素数こそが、その数の最小の素因数に相当します。この性質を利用すれば、各素数を最小の素因数に持つ数の個数を一度に集計できます。 例 入力 − num = 7 出力 − 該当する数の個数 = 38095 入力 − num = 3 出力 − 該当する数の個数 = 166

  5. C++で配列内の合成数の個数と合計を求める方法

    正の整数からなる配列が与えられたとき、その配列に含まれる合成数の個数と合計を求めるのが本記事の課題です。 合成数とは 与えられた整数の集合のうち、素数ではない数を「合成数」と呼びます。ただし、1は合成数でも素数でもなく、「単位数(ユニット)」という特別な数に分類されます。したがって、1を除くすべての整数は、必ず素数か合成数のどちらかに分類されることになります。 100までの合成数は以下の通りです。 4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24, 25, 26, 27, 28, 30, 32, 33, 34, 35, 36, 38, 3

  6. C++で英字アルファベットと同じ位置にある文字を数える方法

    大文字と小文字の両方を含む任意の長さの文字列が与えられたとき、その中から「英字アルファベットにおける位置」と「文字列内での位置」が一致している文字の個数を求めるのが本記事の課題です。例入力 − 文字列 str = eBGD 出力 − カウントは 2説明 − B と D は、英字アルファベットと同じ順序で並んでいる文字です。B は2番目、D は4番目に位置しているため、該当するのはこの2文字になります。入力 − 文字列 str = Abcdeizxy 出力 − カウントは 5説明 − A、B、C、D、E の5文字が英字アルファベットと同じ順序で並んでいます。A が1番目、続いて B、C、D、E

  7. C++で文字列内のASCII値が素数である文字をカウントする方法

    本記事では、大文字と小文字を含む任意の長さの文字列が与えられたとき、その中でASCII値が素数となっている文字の個数を求める方法を解説します。 アルファベット大文字[A-Z]のASCII値は65〜90、小文字[a-z]のASCII値は97〜122の範囲に割り当てられています。これらの値の中には素数と非素数が混在しているため、各文字のASCII値を一つずつ判定していく必要があります。 具体例 入力 string str = Aebg 出力 カウント数:2 説明:「A」のASCII値は65で素数ではないためカウントされません。「e」は101で素数なのでカウントされます。「b」は66で素数ではない

  8. C++で16進数の英字(A〜F)を数える方法

    開始値と終了値を持つ範囲が与えられ、その範囲内に存在する16進数の英字(A〜F)の個数を計算するのが本記事の課題です。 16進数の英字とは? コンピュータの分野において、16進数とは基数が16である数値体系のことです。これは、2進数のデータを16進数の1桁でコンパクトに表現できることを意味します。16進数は0から15までの整数で構成されており、10は「A」、11は「B」、12は「C」、13は「D」、14は「E」、そして15は「F」という英字で表されます。 そのため、以下のプログラムでは、指定された範囲内に16進数の英字(A〜F)がいくつ含まれているかを判定・集計します。 具体例 入力 − st

  9. C++で左右の隣接文字が同じである文字をカウントする方法

    文字列(例えば str)が与えられ、その中から「左側と右側の隣接文字が同じである文字」の数を求めるのが課題です。なお、文字列の先頭と末尾の文字は隣接文字を1つしか持たないため、常にカウント対象に含めます。具体例入力 − string str = poiot 出力 − カウントは 3説明 − この文字列では、先頭の「p」、末尾の「t」、そして左右の隣接文字がどちらも「o」である「i」が条件を満たすため、カウントは3になります。入力 − string str = nitihig 出力 − カウントは 4説明 − この文字列では、「n」「t」「h」「g」が条件を満たすため、カウントは4になります。ア

  10. C++で合計が完全立方数になるトリプレットの個数を数える方法

    n個の整数からなる配列が与えられ、その合計が完全立方数と等しくなるすべてのトリプレット(3つの値の組み合わせ)の個数を求めるのが課題です。完全立方数とは完全立方数とは、ある整数を3乗した数のことです。たとえば、125は5の3乗なので、125は完全立方数であると言えます。代表的な完全立方数には、1、8、27、64、125などがあります。この問題では、配列の中から合計が完全立方数となるトリプレット(3つの値のセット)を見つけて数える必要があります。さらに、トリプレットの合計は最大15000までという条件が設けられているため、考えられる立方数は24個だけです。そこで、動的計画法(DP)を活用すること

  11. C++で循環リンクリストのノード数をカウントする方法

    ノードから構成される循環リンクリスト(Circular Linked List)が与えられ、そのリスト内に存在するノードの総数を求めるのが課題です。 循環リンクリストとは、連結リストの一種であり、最初の要素が最後の要素を指し、最後の要素が最初の要素を指すという特徴を持つデータ構造です。片方向リンクリスト(Singly Linked List)でも双方向リンクリスト(Doubly Linked List)でも、この循環リンクリストとして実装することが可能です。 以下のプログラムでは、片方向リンクリストを循環リンクリストとして実装し、その中に含まれるノード数をカウントする方法を紹介します。 具体

  12. C++で二分木の非葉ノード(葉以外のノード)を数える方法

    二分木が与えられ、その中に存在する非葉ノード(葉以外のノード)の数を求めるのが課題です。二分木とは二分木(バイナリツリー)は、データを格納するために使われる特殊なデータ構造です。各ノードが最大2つの子ノードしか持てないという特別な条件を持っています。二分木は、整列配列のような高速な検索性能と、連結リストのような高速な挿入・削除性能の両方の利点を兼ね備えています。ここで数える「非葉ノード」とは、子ノードを1つ以上持つノードのことで、親ノードとも呼ばれます。二分木の構造は以下のようになります。具体例入力 −出力 − 非葉ノードの数:3説明 − この木では、27・14・35 の3つのノードが子を持っ

  13. C++で[l, r]範囲内のASCII値を持つ文字をカウントして出力する方法

    任意の長さの文字列が与えられたとき、その中からASCII値が指定範囲 [l, r] に含まれる文字を数え、該当する文字を出力します。本記事では、C++を用いてこの問題を解くための手順とサンプルコードをわかりやすく解説します。 英字のASCII値一覧 大文字 A〜Z のASCII値 ABCDEFGHIJKLM65666768697071727374757677 NOPQRSTUVWXYZ78798081828384858687888990 小文字 a〜z のASCII値 abcdefghijklm979899100101102103104105106107108109 nopqrstuvwxyz

  14. C++でASCII値が指定範囲[l、r]外のアルファベットをカウントして出力する方法

    任意の長さの文字列が与えられたとき、その中に含まれるアルファベットのうち、ASCII値が指定範囲 [l, r] に含まれない文字をカウントして出力するのが本記事のテーマです。まず、判定の基準となる英字のASCII値を確認しておきましょう。 大文字アルファベット(A〜Z)のASCII値一覧 ABCDEFGHIJKLM 65666768697071727374757677 NOPQRSTUVWXYZ 78798081828384858687888990 小文字アルファベット(a〜z)のASCII値一覧 abcdefghijklm 9798991001011021031041051061

  15. C++で配列内のユニークな要素数をカウントする方法

    本記事では、重複する要素を含むソートされていない配列が与えられたとき、その配列に含まれるユニークな(重複しない)要素の個数を求める方法を解説します。 配列とは、同じ型の要素を固定サイズで連続的に格納できるデータ構造の一種です。複数のデータをまとめて管理できるだけでなく、同じ型の変数の集合として捉えると、その利便性がより理解しやすくなります。 具体例 入力: int arr[] = {1, 1, 2, 3, 3, 4, 4} 出力: count is 4 説明: この配列には「1、2、3、4」の4種類のユニークな要素が含まれています。配列のサイズは7ですが、これは重複した要素が含まれているためで

  16. C++で1つ目の配列にのみ存在し2つ目の配列にはない要素の個数をカウントする方法

    問題概要 任意のサイズの整数要素からなる配列が2つ与えられ、「1つ目の配列には存在するが、2つ目の配列には存在しない」要素の個数を求めるのが課題です。 配列とは、同じ型の要素を固定サイズで連続的に格納できるデータ構造の一種です。複数のデータをひとまとめに管理するための基本的な仕組みであり、「同じ型の変数を順番に並べたもの」と考えると理解しやすくなります。 例 入力 − int arr_1[] = {1, 2, 3, 4}       int arr_2[] = {1, 5, 6, 7, 8} 出力 − カウントは 3 説明 − arr

  17. 【C++】配列内の2つの指定された要素間にある要素数をカウントする方法

    はじめに整数要素を含む配列と、2つの値「start(開始)」と「end(終了)」が与えられたとき、配列内でこの2つの要素の間に存在する要素の個数を求める問題を考えます。本記事では、C++を用いてこの問題を解く具体的な手順を解説します。配列とは、同じ型の要素を固定サイズで連続的に格納できるデータ構造の一種です。複数のデータをまとめて管理できるため、同じ型の変数の集まりとして考えると理解しやすくなります。なお、start要素が配列内に複数回出現する場合は最初の出現位置を採用し、end要素が複数回出現する場合は最後の出現位置を採用してカウントするのがポイントです。具体例入力: int arr[] =

  18. C++で配列内の「割り切れるペア」の数を数える方法

    本記事では、任意のサイズの整数型要素を持つ配列が与えられたとき、その中から「一方の要素がもう一方の要素を割り切れる」ようなペア(整除ペア)の総数を求める方法を解説します。 配列とは、同じ型の要素を固定サイズで連続的に格納できるデータ構造の一種です。複数のデータをまとめて管理するために使われますが、「同じ型の変数の集まり」と捉えたほうが理解しやすい場合も多いでしょう。 具体例 入力:int arr[] = {1, 2, 3, 6} 出力:count is 4 説明:(1,2)、(1,3)、(1,6)、(3,6) の4つのペアにおいて、一方の要素が他方の要素を割り切れます。1はあらゆる整数を割り

  19. C++で別の配列のいずれかの要素で割り切れる要素を数える方法

    2つの整数型配列、例えば arr_1[] と arr_2[] が与えられたとき、arr_1[] の要素の中で「少なくとも1つの約数が arr_2[] に含まれる」要素の個数を求めるのがこの記事の課題です。つまり、第2配列 arr_2[] の中に約数が1つでも存在する要素だけをカウントする必要があります。配列とは、同じ型の要素を固定サイズで連続的に格納できるデータ構造の一種です。データの集合をまとめて扱うために使われますが、「同じ型の変数の集まり」と考えると理解しやすくなります。具体例入力 − int arr_1[] = {1, 2, 3, 4, 5}  &nbs

  20. C++で配列内に合計値が存在する個別のペアの数をカウントする方法

    整数値からなる任意のサイズの配列 arr[] が与えられたとき、「その和も同じ配列内に存在する」個別のペアの数を計算するのが本記事のテーマです。 配列とは、同じ型の要素を固定サイズで連続的に格納できるデータ構造の一種です。データの集合を保持するために使われますが、実用上は「同じ型の変数の集まり」として捉えると理解しやすいことが多いでしょう。 押さえておくべきポイント ペアは要素の並び順にかかわらず、同じ組み合わせであれば1回のみカウントします。たとえば (3,2) と (2,3) は同一のペアとして1件と数えます。 配列内に複数回現れる値は、ペアを構成するうえでちょうど2つぶんまでしか考慮さ

Total 5990 -コンピューター  FirstPage PreviousPage NextPage LastPage CurrentPage:172/300  20-コンピューター/Page Goto:1 166 167 168 169 170 171 172 173 174 175 176 177 178