C++

 Computer >> コンピューター >  >> プログラミング >> C++
  1. C++で配列の値から三角形を形成できるかどうかを判定する方法

    この問題では、整数の配列が与えられ、その配列の要素を辺として使って非退化三角形を作成できるかどうかを判定します。 非退化三角形とは 非退化三角形とは、面積が正(0より大きい)となる三角形のことです。辺を a、b、c とする三角形が非退化であるための条件は以下の通りです。 a + b > c a + c > b b + c > a 問題例 具体的な例を見てみましょう。 入力:arr[2, 5, 9, 4, 3] 出力:Yes 説明:2、3、4 を辺とする三角形が形成できます。 解決アプローチ この問題を解くには、配列の値が上記の条件を満たすかどうかを確認します。 素朴な解法

  2. C++で七セグメント表示の時刻から作れる時刻パターン数を求める方法

    問題の概要この問題では、電卓などでおなじみのグロー表示管(七セグメントディスプレイ)で表示された2桁の時刻が与えられます。求めるのは、表示中のセグメントを点灯・消灯させることで実現できる、他の時刻パターンの出現総数です。七セグメントディスプレイとは七セグメントディスプレイとは、7本の線分(セグメント)の点灯パターンを切り替えることで数字を表示できる表示装置のことです。電卓やデジタル時計など、身近な機器に広く採用されています。七セグメントディスプレイの外観は以下のようになります。問題例で理解しよう具体例を使って問題を確認しましょう。入力 − 7 5出力 − 20説明 − 十の位の「7」は、セグメ

  3. C++で棒の長さから作れる長方形と正方形の個数を求める方法

    問題の概要 この問題では、N本の棒の長さを表す整数の配列が与えられます。これらの棒を選んで作ることができる「長方形」と「正方形」の合計個数を求めて出力するのが課題です。 具体例で問題を確認してみましょう。 入力: array = {5, 5, 7, 7, 1, 4} 出力: 1 説明: 長さ 5, 5, 7, 7 の4本を選ぶことで、1つの長方形を作ることができます。 解き方のポイント 長方形も正方形も、向かい合う辺が同じ長さである図形です。そのため、同じ長さの棒が「2本ずつのペア」になっている必要があり、どちらの図形を作る場合でも必要なのは同じ長さのペア2組(計4本)です。 そこで、以下の手

  4. C++でチェスのナイトの有効な移動手を数える方法

    問題の概要本記事では、m×n のチェス盤が与えられたとき、ナイト(騎士)がその位置から移動できる有効なマスの総数を求める方法を解説します。盤面は二次元配列 board で表され、駒が置かれている位置は 1 で示されます。つまり board[i][j] = 1 ならば、そのマスには何らかの駒が存在します。さらに、ナイトの現在位置も与えられます。ここではすべての駒が同じ色である、すなわち攻撃(相手の駒を取る動き)は発生しないものと仮定します。ナイトの移動ルールナイトはチェスの駒の中でも特殊な動きをする駒で、次の2パターンのいずれかで移動します。横方向に2マス、縦方向に1マス移動縦方向に2マス、横方

  5. C++で数字列を切り分けて3の倍数の部分を最大化する方法

    問題概要 この問題では、最大105桁にもなる大きな整数値が与えられます。求めるのは、できるだけ多くの部分が3で割り切れるように数を切り分けたときに必要なカット(分割)回数の合計です。 具体例で問題を確認してみましょう。 入力:9216 出力:3 説明:数は「9|21|6」のように3つに分割されます。 解法のアプローチ この問題を効率よく解くには、数の桁を左から順に走査しながら、累積の桁和を3で割った余りを記録していく方法が有効です。同じ余りが2回現れたということは、その間の部分の桁和が3の倍数になっていることを意味するため、その位置で切り分ければ3で割り切れる部分を作れます。 現在の桁だ

  6. C++で迷路からの脱出可否を判定するアルゴリズムと実装例

    問題の概要 この問題では、n個の整数で構成される迷路が与えられます。各整数はそのマスから何マス移動するかを表し、移動の向きは「>」(右方向)と「<」(左方向)の記号で示されます。開始地点はインデックス0の位置で、そこから迷路の外へ脱出できるかどうかを判定することが課題です。 入力例と出力例 具体例で問題の内容を確認してみましょう。 入力: 移動距離の配列 arr[] = {2, 1, 1, 4}、方向の並び s = ><>> 出力: YES 説明: スタート地点から右へ2マス進み(インデックス2)、さらに右へ1マス(インデックス3)、そして右へ4マス進むこ

  7. 【C++】ある文字列のすべての文字が別の文字列に含まれるか判定する方法

    問題概要この問題では、2つの文字列 str1 と str2 が与えられます。求められるのは、str2 を構成するすべての文字が str1 に存在するかどうかを判定することです。入力例str1 = "Hello" str2 = "Hell"出力例Yes説明: str2 のすべての文字(H、e、l、l)は str1 に存在するため、答えは「Yes」となります。シンプルな解法とその課題最も単純なアプローチは、str2 の各文字について str1 内を走査し、その文字が存在するかを1つずつ確認する方法です。しかしこの方法では、最悪の場合 O(n×m) の時間計算

  8. C++で正の要素を偶数インデックス・負の要素を奇数インデックスに配置する方法(相対的な順序は維持しない)

    問題概要 この問題では、整数型の配列が与えられ、すべての正の数を偶数インデックス(0, 2, 4…)に、すべての負の数を奇数インデックス(1, 3, 5…)に配置するように配列を変換することが求められます。 ただし、正の数と負の数の個数が一致しない場合もあります。そのようなケースでは、余分な要素は移動せず元の位置に残します。そのため、変換後も要素間の相対的な順序は維持されません。 具体例を使って問題を確認してみましょう。 入力: {3, 5, -1, 19, -7, -2} 出力: {3, -1, 5, -7, 19, -2} この問題を解く鍵となるのは、「正しい位置に存在しない要素」を配列の

  9. C++で数値のK番目のセットビットの位置を求める方法

    はじめに この記事では、2つの整数 N と K が与えられたとき、数 N の2進表現における右から K 番目のセットビット(値が「1」のビット)の位置(インデックス)を求める方法を解説します。 セットビットの確認は、数値を2進表現に変換して行います。インデックスは右端を 0 として数え始め、左へ向かって増加していきます。 たとえば、2進数「011101」の場合、右から 0 番目のインデックスには「1」、1 番目には「0」、というように各ビットが配置されています。 入出力例 入力: N = 6, K = 2 出力: 2 説明: 6 の2進表現は「0110」です。右から数えて 2 番目のセット

  10. C++で一連の移動後のロボットの最終位置を求める

    問題概要 この問題では、上下左右の4方向に移動できるロボットが与えられます。方向は上(U)、下(D)、左(L)、右(R)の4種類です。また、これらの方向の頭文字からなる移動指示の文字列が与えられます。ロボットの初期位置を (0, 0) としたとき、一連の移動をすべて実行した後の最終位置を出力することが課題です。 例で問題を理解しよう 入力 − LDRRUL 出力 − (0, 0) 説明 − 各移動ごとの座標の変化は以下の通りです。 L(左) : (0,0) → (-1,0) D(下) : (-1,0) → (-1,-1) R(右) : (-1,-1) → (0,-1) R(右) : (0,

  11. 【C++】最も右側のセットビットの位置を効率的に求めるアルゴリズム

    問題概要この記事では、整数 N が与えられたとき、その数値における最も右側のセットビット(値が 1 になっているビット)の位置(インデックス)を出力する方法を解説します。問題の例入力: 4出力: 3解説: 4 を 2 進数で表すと「100」となり、セットビットの位置は最下位ビットから数えて 3 番目です。解き方のアプローチ単純な解法:シフト操作最も直感的な方法は、セットビットに行き当たるまで数値を右へシフトし続けることです。しかし、この方法では数値が大きいほど多くのシフト処理が必要になり、計算コストが膨らんでしまいます。効率的な解法:2の補数とビット演算を活用より効率的なのが、ブール代数(2

  12. C++で2つの数値の右端から最初に異なるビットの位置を求める方法

    問題の概要 この問題では、2つの整数 N と M が与えられます。目的は、それぞれの数値を2進数で表したときに、右側(最下位ビット側)から見て最初に異なるビットが現れる位置(インデックス)を求めることです。 具体例 入力: N = 12、M = 10 出力: 2 説明: (12)10 = (1100)2、(10)10 = (1010)2。右から2番目のビットだけが異なっています。 解き方の考え方:XORを活用する 2つの数値の「異なるビット」をすべて見つけるには、XOR(排他的論理和) を使うのが最も効果的です。XORは対応するビットが異なる場合にのみ1を返すため、N ^ M の結果には

  13. C++で2つの数値の右端の共通ビットの位置を求める方法

    問題概要 この問題では、2つの数値 M と N が与えられ、両方の数値に共通して存在するビットの中で、最も右側(下位)にあるものの位置(インデックス)を出力することが求められます。 具体例を使って問題を理解しましょう。 入力:N = 4、M = 7 出力:3 説明:(4)₂ = 100、(7)₂ = 111。共通するビットのうち最も右側にあるものは、3番目の位置に存在します。 解法のアプローチ この問題を解くには、まず2つの数値で同じ値になっているすべてのビットを見つける必要があります。同じビットを特定するためには、次の手順で考えます。 M と N のXOR(排他的論理和)を計算します。

  14. C++で2つの整数の2進加算において最初にキャリーが発生する右端のビット位置を求める

    この問題では、2つの正の整数 N と M が与えられます。目的は、N と M を2進数で加算したときに最初に桁上げ(キャリー)が発生するビット位置のうち、最も右側(最下位側)にあるものを求めて出力することです。 問題の例 入力: N = 5、M = 14 出力: 3 説明: (5)₂ = 0101、(14)₂ = 1110 0101 + 1110 -------- 10011 加算の過程を追うと、右から3番目のビット位置で初めて桁上げが発生していることが分かります。 解法のアプローチ ブール代数の基本的な性質から、次のことが導けます。 2進数の加算で桁上

  15. C++で円上に立つ人の真向かいの位置を求めるアルゴリズム

    問題概要 この問題では、2つの整数 N と M が与えられます。円の周りにはN人が等間隔で立っており、Mはそのうちのある一人の人の位置を表しています。私たちのタスクは、位置Mにいる人と正反対(直径を挟んで向かい合う)にいる人の位置を出力することです。 入出力例 入力: N = 6、M = 3 出力: 6 説明: 円の周りに6人が立っているとき、位置3にいる人と向かい合うのは位置6の人です。 解き方の考え方 円の中心を挟んで正反対の位置は、必ずちょうど半分(N/2)だけ離れた場所にあります。この性質を使うと、対象の人が円の前半にいるか後半にいるかによって、次の2つの場合に分けて考えることがで

  16. C++で左右交互にN回移動した後の最終位置を求める方法

    この問題では、3つの整数 N、A、B が与えられます。座標 0 の地点に立っている人が、まず右へ A ステップ進み、次に左へ B ステップ戻るという動作を交互に繰り返します。目的は、N 回の移動を完了した後の人物の最終的な座標を求めて出力することです。 問題例 入力: N = 4, A = 3, B = 1 出力: 4 説明: 1回目の移動 → 右に3 (+3) 2回目の移動 → 左に1 (-1) 3回目の移動 → 右に3 (+3) 4回目の移動 → 左に1 (-1) 4回移動後の位置 = +3 - 1 + 3 - 1 = 4 解き方の考え方 この問題を解くには、右方向の移動を正・左方向

  17. クラウドコンピューティングのポータブルアプリケーションとその障壁

    クラウドコンピューティングとは何かクラウドコンピューティング(インターネットベースのコンピューティング)とは、ローカルサーバーではなく、インターネット上でホストされた仮想サーバー(クラウドサーバー)にデータを保存し、そこへアクセスして利用する仕組みのことです。クラウドコンピューティングの最大の魅力は、ユーザーが場所を選ばずにデータを利用できる点にあります。これにより作業のポータビリティ(可搬性)が大幅に向上し、クラウド上のデータや処理はどこからでもアクセス可能になります。特定のデバイスや所在地に縛られることがないのです。企業にとってのメリットこの特性は、企業にとって特に重要な意味を持ちます。仮

  18. C++で木の全ノードに中間順後続ノード(Inorder Successor)を設定する方法

    この問題では、nextポインタを持つ木構造が与えられます。私たちのタスクは、このnextポインタに各ノードの中間順後続ノード(inorder successor)を設定することです。まず、使用するノード構造体は以下のように定義されています。struct node { int value; struct node* left; struct node* right; struct node* next; }すべてのnextポインタは初期状態でNULLに設定されており、これを各ノードの中間順後続ノードを指すように書き換える必要があります。基本概念のおさらい中間順走査

  19. C++でのデータ分析に役立つ人気ツール徹底解説

    データ分析とはデータ分析(Data Analytics)とは、大量のデータを処理し、機械による意思決定を支援する有益な情報を抽出するプロセスです。データ処理には、クリーニング(データ清掃)、再構築、検査といった作業が含まれます。データ分析では扱うデータ量が非常に膨大になるため、高い計算能力が求められます。そのため、データ分析専用に設計された専門ツールが数多く登場しています。ここでは、特によく知られている代表的なデータ分析ツールを紹介します。1. R言語Rは、Windows、macOS、Unixなど主要なプラットフォームすべてで利用できる、最も有名で広く使われているデータ分析ツールの一つです。デ

  20. C++で学ぶポリュビオス方陣暗号:文字列を数値に暗号化する方法

    本記事では、与えられた文字列をポリュビオス方陣暗号(Polybius Square Cipher)を使って数値に暗号化する方法を解説します。 ポリュビオス方陣暗号とは? ポリュビオス方陣暗号は、古代ギリシャの歴史家ポリュビオスにちなんで名付けられた暗号方式で、アルファベットを「行番号+列番号」の組み合わせからなる数値へ変換するための表を使用します。 英語の場合、26個のアルファベットを5×5=25マスの表に収める必要があるため、「I」と「J」は同じマスにまとめて配置されるのが一般的です。 以下は、ポリュビオス方陣の基本形です。 12345 1ABCDE 2FGHI / JK 3LMNOP

Total 5990 -コンピューター  FirstPage PreviousPage NextPage LastPage CurrentPage:158/300  20-コンピューター/Page Goto:1 152 153 154 155 156 157 158 159 160 161 162 163 164