C++

 Computer >> コンピューター >  >> プログラミング >> C++
  1. C++のポインタを使って文字列を反転表示する方法

    本記事では、C++のポインタを利用して文字列を反転して表示する方法を解説します。まず、strlen()関数で文字列の長さを取得し、その長さから逆順にループ処理を行うことで、元の文字列を後ろから1文字ずつ出力していきます。サンプルコード#include <string.h> #include <iostream> using namespace std; int main(){ char *str="ajaykumar"; cout<<"original string::"<<str;

  2. C++で配列を逆順に反転する方法を解説

    本記事では、C++を使って配列を逆順(降順)に反転する方法を解説します。ループで配列を走査しながら、最も大きいインデックスの要素と最も小さいインデックスの要素を順次入れ替えていくことで、配列全体を反転させます。 アルゴリズムの考え方 配列の反転は、以下の手順で実現できます。 先頭を指す low ポインタと、末尾を指す high ポインタを用意します。 low < high が成り立つ間、swap 関数を使って両端の要素を入れ替えます。 1回の入れ替えごとに low を1つ進め、high を1つ戻し、中央に向かって処理を進めます。 この方法なら、計算量は O(n)、追加のメモリは不要(

  3. 【C++】配列をソートするために必要な最小スワップ回数を求める方法

    問題文N個の互いに異なる要素からなる配列が与えられたとき、その配列を昇順にソートするために必要な最小のスワップ(要素の入れ替え)回数を求めます。例たとえば、配列が {4, 2, 1, 3} の場合、必要なスワップは 2回 です。arr[0](4)と arr[2](1)を交換 → 配列は {1, 2, 4, 3} になりますarr[2](4)と arr[3](3)を交換 → 配列は {1, 2, 3, 4} となり、ソート完了ですアルゴリズムC++で pair の vector を作成します。first には配列の値を、second には元の配列におけるインデックスを格納します。pair の f

  4. C++で実装するFirst Fitアルゴリズム:メモリ管理の基本とサンプルコード

    n個のプロセスとm個のメモリブロックが与えられたとき、First Fit(ファーストフィット)メモリ管理アルゴリズムを使って、各プロセスに適切なメモリブロックを割り当てる方法を解説します。 First Fitメモリ管理アルゴリズムとは? オペレーティングシステムは、プロセスにメモリブロックを割り当てる際に、複数のメモリ分割アルゴリズムを使用しています。代表的なアルゴリズムは以下の通りです。 First Fit アルゴリズム Next Fit アルゴリズム Best Fit アルゴリズム Worst Fit アルゴリズム Quick Fit アルゴリズム First Fitアルゴリズムは、こ

  5. C++で指定されたパスを生成するための最小停止点数を求める

    本記事では、二次元平面上の移動経路から、その経路を実現するために最低限必要な停止点(ストップ)の数を求めるアルゴリズムを、C++のコード例とともに解説します。 問題の定義 二次元空間上に多数の点が存在し、それらを特定の順序で訪問する必要があります。 ある点から別の点への移動は常に最短経路が選ばれ、経路の各区間は必ずグリッド線(水平線・垂直線)に沿って進みます。 点を訪問するために選ばれた経路が文字列として与えられます。このとき、与えられた経路を生成するために必要な最小の停止点数を求めます。 アルゴリズム 1. 各停止点を訪問する際の移動パターンを観察することで、この問題を解決できる 2.

  6. C++で文字列を反転させる方法(反復処理)

    C++で文字列を逆順にする方法は数多く存在し、スタックを使う方法、インプレース(その場で入れ替える)方式、反復処理などが挙げられます。本記事では、以下のアルゴリズムに沿って、シンプルな文字列を反復処理によって反転させる方法を紹介します。アルゴリズムSTART Step-1: 文字列を入力する Step-2: length() メソッドで文字列の長さを取得する Step-3: forループを使って末尾の文字を先頭側と入れ替える Step-4: 結果を出力する END上記の手順をもとに、C++言語で実装したコードが以下の通りです。サンプルコード#include &l

  7. 【C++】回文の順列を作るために削除すべき最小文字数を求めるアルゴリズム

    問題の概要文字列 S が与えられたとき、その文字列の順列(並べ替え)のうち少なくとも1つが回文になるようにするために、削除する必要のある文字数の最小値を求めます。例たとえば、str = abcdba の場合、c または d のどちらか1文字を削除すれば、残りの文字で回文を作ることができます。解法の考え方この問題は、文字の出現頻度に着目することで効率的に解けます。ポイントは以下の通りです。1. 回文には「偶数長」と「奇数長」の2種類があります。2. 偶数長の回文では、すべての文字が偶数回出現しなければなりません。3. 奇数長の回文では、1つの文字だけが奇数回出現し、それ以外のすべての文字は偶数回

  8. C++でピラミッド型のパターンを出力する方法

    C++プログラミングでは、二重ループ(for文とwhile文)を組み合わせることで、コンソールにピラミッド状のパターンを簡単に出力できます。この記事では、その基本的な実装方法を解説します。ピラミッド出力の仕組みピラミッドを出力するポイントは、次の2つの要素を制御することです。空白(スペース)の出力: 各行の左側に適切な数のスペースを挿入し、ピラミッドの形状を作ります。アスタリスク(*)の出力: 各行に奇数個の「*」を出力します(1個、3個、5個…)。外側のforループで行数を制御し、内側のループでスペースとアスタリスクを出力しています。サンプルコード#include <iostream&

  9. 【C++解説】max−min ≤ K を満たすための配列からの最小削除数を求めるアルゴリズム

    問題文N個の整数と値Kが与えられたとき、残りの要素について Amax − Amin ≤ K が成り立つようにするために削除が必要な要素の最小個数を求めます。要素を削除した後の Amax(最大値)と Amin(最小値)は、残った要素の中から判断します。例配列 arr[] = {1, 3, 4, 9, 10, 11, 12, 17, 20}、k = 4 の場合、出力は 5 となります。配列の先頭から 1、3、4 を削除する配列の末尾から 17 と 20 を削除する最終的な配列は {9, 10, 11, 12} となり、12 − 9 ≤ 4 を満たすアルゴリズム与えられた要素をソートします。貪欲法の

  10. C++で再帰を使って文字列を反転する方法

    再帰とは再帰(リカージョン)とは、自己相似的な形で同じ処理を繰り返していく手法のことです。プログラミング言語において、ある関数の中からその関数自身を呼び出すことができる仕組みがあり、この呼び出しは「再帰呼び出し」と呼ばれます。C++では、この再帰的な関数を利用することで、文字列をシンプルなコードで反転させることができます。以下のサンプルプログラムを見てみましょう。サンプルコード#include <bits/stdc++.h> using namespace std; void reverse(string str){ if(str.size() == 0){

  11. C++で無表情な顔(*_*)のパターンを出力するプログラム

    数値 n が与えられたとき、n 行までの「無表情な顔(Expressionless Face)」パターンを作成して表示するのが課題です。無表情な顔は特殊文字を組み合わせて表現され、その見た目は「*_*」のようになります。 このパターンでは、行ごとに星(*)とアンダースコア(_)の個数が変化することで、左右対称の顔のような模様が浮かび上がります。ネストしたループ処理の練習問題としても最適です。 例 入力:n = 6 出力: 入力:n = 8 出力: アルゴリズム パターン生成の手順は以下の通りです。 開始 ステップ 1-> 関数 print_stars(int i) の中で   j

  12. C++で10のK乗(10^K)で割り切れる数にするための最小削除桁数

    問題文正の整数 N と K が与えられます。N の桁をいくつか削除して、残った数が 10K(10のK乗)で割り切れるようにしたいとき、削除が必要となる最小の桁数を求めてください。どのように削除しても条件を満たせない場合は -1 を出力します。例N = 10203027、K = 2 の場合を考えてみましょう。このとき必要な削除桁数は 3 桁です。「3」「2」「7」の 3 桁を取り除くと、数は 10200 となり、これは 102 = 100 で割り切れます。アルゴリズムまず押さえておきたいのは、「ある整数が 10K で割り切れる ⟺ その数の末尾に 0 が K 個以上並んでいる」という性質です。し

  13. 変動係数(CV)を求めるC++プログラムの実装方法

    サイズnのfloat型の値を要素とする配列が与えられ、その変動係数(Coefficient of Variation:CV)を計算して結果を表示するのが本記事の課題です。 変動係数とは? 統計学において、変動係数は与えられたデータ全体のばらつき(散らばり)の度合いを相対的に評価するための指標です。単位やスケールが異なるデータ同士でも、変動の大きさを比較できる点が大きな特徴です。 金融の分野では、投資額に対するリスクの大きさを測るために活用されます。標準偏差と平均の比率が小さいほど、投資に伴うリスクは低いと判断できます。変動係数は「標準偏差を平均で割った値」として、次の式で定義されます。 変動係

  14. C++で配列の合計を偶数にするための最小削除数を求める方法

    問題文N個の整数からなる配列 arr[] が与えられたとします。残りの要素の合計が偶数となるようにするために、配列から取り除くべき要素の最小個数を求めるプログラムを作成します。例入力配列が {10, 20, 30, 5} の場合、配列全体の合計は65(奇数)です。この合計を偶数にするには、要素「5」を1つ取り除くだけで十分で、その結果 合計は60(偶数)になります。したがって、答えは「1」となります。アルゴリズムこの問題は、偶数と奇数の加法における基本的な性質を利用することで、非常にシンプルに解くことができます。偶数をいくつ足し合わせても、合計は常に偶数になります。奇数を奇数個足し合わせると、

  15. 最短ジョブ優先(SJF)スケジューリングのためのC++プログラム(非プリエンプティブ方式)

    プロセスとそのバースト時間、およびクオンタム制限が与えられたとき、最短ジョブ優先(SJF)スケジューリングの非プリエンプティブ方式を用いて、各プロセスの待ち時間・ターンアラウンド時間、およびそれぞれの平均時間を求めて出力することが本記事の課題です。 最短ジョブ優先(SJF)スケジューリングとは? 最短ジョブ優先(SJF: Shortest Job First)スケジューリングは、非プリエンプティブ(ノンプリエンプティブ)方式に従うジョブ・プロセススケジューリングアルゴリズムです。この方式では、スケジューラが待ち行列の中から完了までの時間が最も短いプロセスを選択し、そのジョブまたはプロセスにC

  16. C++で配列の合計を奇数にするための最小削除数を求める方法

    問題文 N個の整数からなる配列 arr[] が与えられます。残りの要素の合計が奇数になるように配列から要素を取り除くとき、削除が必要な要素数の最小値を求めるプログラムを作成しましょう。 例 入力配列が {10, 20, 30, 5, 7} の場合について考えてみます。この配列の合計は 72 という偶数であるため、合計を奇数にするには要素を1つ削除する必要があります。具体的には、「5」または「7」のいずれかを取り除けば条件を満たせます。 アルゴリズム この問題は、偶数と奇数の足し算に関する以下の基本的な性質を利用すると効率的に解くことができます。 偶数をいくつ足し合わせても、その合計は必ず偶

  17. C++で元の文字列と一致するまでに必要な最小回転数を求める方法

    問題概要文字列が与えられたとき、その文字列を回転させて元の文字列と完全に一致させるために必要な最小の回転回数を求めるのが、この問題の目的です。例たとえば、入力文字列が「bbbbb」の場合、必要な最小回転数は 1 です。1回転させるだけで元の文字列と一致するためです。アルゴリズムこの問題は、元の文字列を2回連結した文字列(自己連結文字列)を利用することで、効率的に解くことができます。手順は以下のとおりです。1. 結果を格納する変数 result = 0 で初期化する 2. 元の文字列を2回連結した一時文字列 temp を作成する 3. temp の先頭から1文字目(インデックス1)以降について、

  18. C++で回文部分文字列を繰り返し削除して文字列を消去する最小ステップ数を求める方法

    問題文数字のみで構成された文字列が与えられます。1ステップごとに「回文になっている部分文字列」を1つ削除できるとき、この文字列をすべて削除するために必要な最小ステップ数を求めます。部分文字列を削除した後は、残りの部分同士が連結されます。例入力文字列が「3441213」の場合、最小2ステップで削除できます。まず「121」を削除します。残りの文字列は「3443」になります残った「3443」は回文なので、まとめて削除しますアルゴリズム(考え方)この問題は動的計画法(DP)を使うことで効率的に解けます。dp[i][j] を「部分文字列 s[i, j] を削除するのに必要なステップ数」と定義します各文字

  19. C++で配列の全要素を4の倍数にするための最小操作回数を求める

    問題文 サイズ n の整数配列が与えられたとき、配列内のすべての要素を4で割り切れるようにするために必要な最小の操作回数を求めます。ここで1回の操作とは、「配列から任意の2つの要素を取り除き、その合計値を新しい要素として配列に追加する」ことを指します。 例 入力配列が {1, 2, 0, 2, 4, 3} の場合、必要な操作は2回です。 1 + 3 = 4 2 + 2 = 4 0 と 4 はもともと4で割り切れるため、これらを組み合わせる操作は不要です。したがって、正解は2となります。 アルゴリズム 配列の全要素の合計が4で割り切れない場合、どのように操作しても条件を満たせないため、不可能

  20. C++でバイナリ文字列から部分文字列「010」を削除する最小ステップ数を求める方法

    問題概要バイナリ文字列が与えられたとき、その文字列から部分文字列「010」を削除するために必要な最小のステップ数を求めるのが課題です。ここでいう1ステップとは、文字列内の任意の1文字を「0」から「1」へ(またはその逆へ)変更する操作を指します。例入力文字列が「010010」の場合、必要なステップ数は2です。最初の「0」を「1」に変更します。文字列は「110010」になります。最後の「0」を「1」に変更します。最終的な文字列は「110011」になり、「010」というパターンが完全に消えます。アルゴリズム1. 文字列をインデックス0からn-2まで走査する 2. 連続する3文字が「0」「1」「0」の

Total 5990 -コンピューター  FirstPage PreviousPage NextPage LastPage CurrentPage:109/300  20-コンピューター/Page Goto:1 103 104 105 106 107 108 109 110 111 112 113 114 115