C++

 Computer >> コンピューター >  >> プログラミング >> C++
  1. C++で多項式の導関数を求めるプログラムの実装方法

    多項式の各項を含む文字列が与えられたとき、その多項式の導関数を計算するのが本記事の課題です。 多項式とは? 「多項式(Polynomial)」という言葉は、「多く」を意味する「Poly」と「項」を意味する「nomial」という2つの言葉から成り立っており、文字どおり「多くの項」で構成される式を指します。多項式とは、変数・係数・指数を含み、変数の加算・減算・乗算といった演算のみを用いて表された式のことです。 多項式の例: x^2 + x + 1 多項式 p(x) = mx^n の導関数は、以下のようになります。 m * n * x^(n-1) 入出力例 入力: str = 2x^3 + 1x^1

  2. C++で学ぶ最適ページ置換アルゴリズム(OPT)の実装方法 ― ヒット数とミス数の求め方

    ページ参照列とフレーム数が与えられたとき、最適ページ置換アルゴリズム(Optimal Page Replacement Algorithm)を用いてメモリブロックにページを割り当てた場合のヒット数とミス数を求めるのが本記事の目的です。 最適ページ置換アルゴリズムとは? ページ置換アルゴリズムとは、「どのメモリページを入れ替えるか」を決定するアルゴリズムのことです。その中でも最適ページ置換アルゴリズムは、「今後最も長い間参照されないページ」を置き換え対象として選ぶ方式です。 理論上は最もミス(ページフォールト)が少ない理想的なアルゴリズムですが、将来のページ参照を正確に予測することは現実には不可

  3. 【C++】メモリ管理におけるベストフィット(最適適合)アルゴリズムの実装プログラム

    ブロックサイズとプロセスサイズを格納した2つの配列が与えられたとき、メモリ管理における「ベストフィット(Best Fit)アルゴリズム」に従って割り当て結果を出力するのが本記事のテーマです。 ベストフィットアルゴリズムとは? ベストフィットはメモリ管理アルゴリズムの一種で、プロセスの要求サイズを満たす空きパーティションの中から「最も小さいもの」を割り当てる方式です。このアルゴリズムでは、メモリ上の全ブロックを走査し、プロセスにとって最小かつ最も適切なブロックを特定することで、メモリの無駄を最小限に抑えます。 具体的には、ブロックサイズとプロセスサイズを入力として受け取り、「各プロセスにどのブ

  4. 優先度スケジューリングを実装するC++プログラムの完全解説

    はじめにn個のプロセス(P1、P2、P3、…、Pn)と、それぞれのプロセスに対応するバーストタイムおよび優先度が与えられます。本記事では、優先度CPUスケジューリングアルゴリズムを用いて、平均待ち時間・平均ターンアラウンド時間・プロセスの実行順序を求めるC++プログラムを解説します。待ち時間とターンアラウンド時間とは?ターンアラウンド時間とは、プロセスの投入から完了までの時間間隔のことです。ターンアラウンド時間 = プロセスの完了時刻 − プロセスの投入時刻待ち時間は、ターンアラウンド時間からバーストタイムを差し引いた値として求められます。待ち時間 = ターンアラウンド時間 − バーストタイム

  5. 二分法を用いて方程式の根を求めるC++プログラム

    関数f(x)と2つの数a、bが与えられ、f(a)・f(b)<0を満たし、関数f(x)が区間[a, b]内に存在するとします。ここでの課題は、二分法(バイセクション法)を用いて、関数f(x)の区間aとbの間に存在する根の値を求めることです。 二分法とは? 二分法とは、「a」と「b」で定義された範囲内において、関数f(x)の根の値を求めるための数値計算手法の一つです。関数の根とは、その値を代入したときにf(x)=0となるような値xのことです。 例 方程式 F(x) = x^3 − 8 を考える この方程式は、x = 2 のとき F(x) = 2^3 − 8 = 0 となります。 したがって

  6. C++で配列内の重複しない(ユニークな)要素の積を求める方法

    重複する要素を含む配列が与えられたとき、その配列内で重複していない(ユニークな)要素をすべて掛け合わせた積を求めて結果を表示するのが、本記事の課題です。例入力: arr[] = {2, 1, 1, 2, 3, 4, 5, 5 } 出力: 120 説明: 1、2、5は複数回出現するため、最初の出現のみを考慮します。 したがって結果は 1 × 2 × 3 × 4 × 5 = 120 となります。 入力: arr[] = {1, 10, 9, 4, 2, 10, 10, 45, 4 } 出力: 32400 説明: 10と4は複数回出現するため、最初の出現のみを考慮します。 したがって結果は 1 ×

  7. 【C++】std::sortで任意のデータ型の配列をソートする方法を解説

    整数(int)、浮動小数点数(float)、文字列(string)、真偽値(bool)など、さまざまなデータ型の値が与えられた場合でも、共通の1つの関数を使って任意のデータ型の変数をソートし、その結果を表示したいという場面は多くあります。 C++では、標準テンプレートライブラリ(STL)に用意されている std::sort を使うことで、あらゆる型の配列を簡単にソートできます。デフォルトでは配列の要素が昇順に並べ替えられます。sort() 関数が受け取る主な引数は以下のとおりです。 開始位置: 配列の先頭要素。ソートを開始する場所を指定します。 終了位置: 配列の末尾。ここまでソートが行われ

  8. C++ですべての配列要素を等しくするために必要な最小操作回数を求める方法

    問題文 n 個の正の整数からなる配列が与えられます。すべての要素を等しくするために必要な最小の操作回数を求めてください。1 回の操作では、配列内の任意の要素に対して、加算・乗算・減算・除算のいずれかを行うことができます。 例 入力配列が {1, 2, 3, 4} の場合、すべての要素を等しくするには最小で 3 回の操作が必要です。たとえば、要素 1 に対して 3 回の加算を行えば、すべての要素を 4 に揃えることができます。 アルゴリズム 最も出現回数(頻度)が多い要素を選びます。これを「x」と呼びます。 同じ値の要素がすでに x 個存在するため、残りの n − x 個の要素に対して操作を

  9. C++のstringstreamを使った単語数カウントと頻度集計の方法

    本記事のサンプルコードでは、C++のstringstreamを使用して、文字列内の総単語数をカウントする方法と、特定の単語の出現頻度を集計する方法を解説します。 stringstreamクラスは、stringオブジェクトをストリームと結び付けるクラスです。これにより、文字列をあたかも入力ストリームであるかのように扱い、cinと同じ感覚で単語を一つずつ読み取ることができます。 このコードは2つの機能を実現します。まず文字列内の単語の総数をカウントし、次にmapコンテナとイテレータの基本的なメソッドを活用して、各単語の出現頻度を計算します。実装は以下の通りです。 サンプルコード #include

  10. C++で行列のすべての要素を等しくするために必要な最小演算回数を求める

    問題概要整数 K と M × N の行列が与えられます。1回の演算では、行列内の任意の要素に対して K を足すか引くことができます。このとき、行列のすべての要素を等しい値に揃えるために必要な最小の演算回数を求めるのが課題です。例たとえば、入力行列と K が次のとおりである場合を考えます。入力行列: { {2, 4}, {20, 40} } K = 2この場合、すべての要素を中央値の 20 に揃えることで、合計 27 回の演算で実現できます。Matrix[0][0]: 2 + (K × 9) = 20 → 9 回 Matrix[0][1]: 4 + (K × 8) = 2

  11. 【C++】スタインのアルゴリズム(バイナリGCD)で最大公約数を効率的に求める方法

    スタインのアルゴリズム(Steins Algorithm)はバイナリGCDアルゴリズムとも呼ばれ、2つの非負整数の最大公約数(GCD:Greatest Common Divisor)を求めるための手法です。従来のユークリッドの互除法が除算を繰り返すのに対し、このアルゴリズムはビットシフト・比較・減算だけで計算を進められる点が最大の特徴です。コンピュータ上では除算よりもシフト演算や減算の方が高速に処理できるため、実行速度の面で大きく有利になります。なお、両方の引数が0の場合、最大公約数は0と定義されます(gcd(0, 0) = 0)。以下にGCD(a, b)を求める手順を示します。 アルゴリズム

  12. C++で配列の全要素を等しくするための最小操作回数を求めるアルゴリズム

    問題の概要n個の正の整数からなる配列が与えられたとき、すべての要素を等しい値にするために必要な最小の操作回数を求めます。操作としては、配列の任意の要素に対して「加算・減算・乗算・除算」のいずれかを1回適用することができます。例入力配列が {1, 2, 3, 4} の場合、最小で 3回 の操作で全要素を等しくできます。たとえば、値が1の要素に対して3回の加算を行えば、すべての要素を4に揃えることができます。解法の考え方この問題のポイントは、「すでに同じ値になっている要素は操作する必要がない」という点に気づくことです。したがって、配列内で最も多く出現する値(最頻値)に他の要素をすべて揃えれば、操作

  13. C++で1〜Nのすべての整数を部分和として表すために必要な最小の個数を求める方法

    問題文整数 N が与えられます。K 個の整数を選び、そのうちのいくつか(またはすべて)を足し合わせることで、1 から N までの範囲に含まれるすべての整数を作り出せるようにします。このとき必要な K の最小値を求めるのがこの問題の目的です。例N = 8 の場合、答えは K = 4 となります。たとえば 1, 2, 3, 4 の 4 つの整数を選ぶと、それらをいくつか組み合わせるだけで、1 から 8 までのすべての数を作り出せます。1 = 12 = 23 = 34 = 45 = 1 + 46 = 2 + 47 = 3 + 48 = 1 + 3 + 4アルゴリズムこの問題は、与えられた整数 N の

  14. C++で1〜Nの数の合計がSになる最小個数を求める

    問題文1からNまでのN個の整数と、ある整数Sが与えられます。使用できる各数はN以下という制約のもとで、合計がSになるために必要な「数の個数」の最小値を求めて出力してください。例n = 7、s = 10 の場合、必要な数は最小で2個です。たとえば、次のような組み合わせが考えられます。(7, 3) (6, 4)アルゴリズム合計Sをできるだけ少ない個数で作るには、大きな数(最大でN)を優先的に使えばよいことが分かります。したがって、答えは次の式で計算できます。S % N > 0 のとき : (S / N) + 1 S % N == 0 のとき : S / Nつまり、これは「SをNで割った値の切

  15. C++ STLのstable_sort()関数の使い方と安定ソートの仕組みを解説

    C++のSTL(標準テンプレートライブラリ)に含まれるstable_sort()は、指定された範囲の要素を昇順に並べ替えるソートアルゴリズムです。この関数が「安定(stable)」と呼ばれるのは、値が等しい要素同士の相対的な順序が、ソート後も維持されるためです。この特性を活かすと、複数のキーを持つデータを段階的にソートする処理が実現できます。例えば、まず名前をキーとして要素を昇順にソートし、その後にセグメント(区分)をキーとして再度ソートすると、同じセグメント内では名前順の並びが保たれたままになります。通常のsort()ではこの順序の維持が保証されないため、安定性が必要な場面ではstable_

  16. C++で桁の合計がnとなる最小のラッキーナンバー(4と7のみで構成)を求める方法

    問題の概要ラッキーナンバーとは、10進表記がラッキーな数字である「4」と「7」のみで構成される正の整数のことです。この問題では、各桁の数字の合計がnと等しくなるような、最小のラッキーナンバーを求めます。例sum = 22 の場合、4 + 4 + 7 + 7 = 22 が成立するため、答えは 4477 となります。アルゴリズムsumが4の倍数であれば、答えはすべて「4」で構成されます。sumが7の倍数であれば、答えはすべて「7」で構成されます。sumが4の倍数でも7の倍数でもない場合は、どちらかの数字を引き続け、sumがもう片方の倍数になるまで減算を行います。実装例(C++)#include &

  17. C++で文字列を降順にソートする方法

    C++プログラミングでは、sortメソッドなどさまざまな手法を使って、文字列を昇順・降順に並べ替えることができます。ここでは、文字列を比較するstrcmp関数(1つ目の単語と2つ目の単語を比較)と、文字列をコピーするstrcpy関数(1つ目の単語を一時変数に退避)を、外側と内側のループで組み合わせて、単語を降順に並べ替える方法を紹介します。 サンプルコード #include<bits/stdc++.h> using namespace std; int main(){ char str[3][20]={Ajay,Ramesh,Mahesh}; char t[20];

  18. C++の選択ソートで文字列配列をソートする方法

    選択ソートの仕組み選択ソート(Selection Sort)は、未ソート部分から最小の要素を繰り返し見つけて先頭に移動させることで、配列全体を整列させるシンプルなアルゴリズムです。各反復処理において、未ソートの部分配列から最小要素を選び出し、ソート済み部分の末尾へ移動していきます。文字列の配列を扱う場合は、数値の比較の代わりに strcmp() 関数を使って文字列を辞書順に比較する点がポイントです。サンプルコード#include <iostream> #include <string.h> using namespace std; #define MAX_LEN 50

  19. C++で2つのベクトルの内積と外積を求めるプログラム

    ここでは、x・y・zの方向成分を持つ2つのベクトル(ベクトルAとベクトルB)が与えられ、その内積(ドット積)と外積(クロス積)を求める方法を解説します。 ベクトルとは? 数学において、大きさ(マグニチュード)と方向の両方を持つ量をベクトルと呼び、大きさのみを持つ量をスカラーと呼びます。ベクトルが始まる点を「始点」、ベクトルが終わる点を「終点」といい、始点と終点の間の距離がベクトルの大きさ(絶対値)となります。 ベクトルの主な種類 単位ベクトル ― 大きさが1であるベクトルのことです。 ゼロベクトル ― NULLベクトルとも呼ばれ、始点と終点が同じ点であるベクトルです。 共始点ベクトル ― 2

  20. C++で指定された数値のセットビットから作れる最小の数を求める方法

    問題の概要符号なし整数が与えられたとき、その数値に含まれる「セットビット(1になっているビット)」だけを使って構成できる最小の数を求めます。例入力が 10 の場合、答えは 3 になります。10 の2進表現は 1010 であり、セットビットは2つあります。2つのセットビットを持つ最小の数は 0011、すなわち 3 です。アルゴリズム与えられた数値のセットビットの個数を数えます。2^(セットビット数) − 1 を計算した値が、求める最小の数になります。たとえばセットビットが3個の場合は 2^3 − 1 = 7(2進数で 111)となります。セットビットをすべて下位の桁に集めた形が最も小さい数になる

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