-
C++で数値の桁の合計を1桁になるまで繰り返し求める方法
このチュートリアルでは、与えられた整数の各桁の合計を計算し、その結果が1桁になるまで同じ処理を繰り返すプログラムをC++で作成します。このような演算は「デジタルルート(数字根)」と呼ばれることもあります。 まずは具体的な例を見てみましょう。 入力: 4543 出力: 7 計算の流れは次のとおりです。まず 4 + 5 + 4 + 3 = 16 となり、16はまだ2桁なのでさらに 1 + 6 = 7 を計算します。7は1桁なので、これが最終的な答えになります。 解き方の手順 対象となる数値を用意します。 合計を格納する変数を0で初期化します。 合計が9以下になるまで以下の処理を繰り返します。
-
C++で数値のパリティを効率的に求める方法
このチュートリアルでは、C++を使って数値のパリティ(偶奇性)を効率的に求めるプログラムを作成します。パリティとは、数値を2進数で表したときに「1」が現れる回数が偶数か奇数かを示すものです。通常、1ビットずつ確認する方法では計算に時間がかかりますが、XOR(排他的論理和)と右シフト演算子を組み合わせることで、わずか数ステップで高速に求められます。パリティを求めるアルゴリズム以下の手順で、XORと右シフト演算を繰り返し適用することで、32ビット整数のパリティを効率的に計算できます。int b; b = n ^ (n >> 1); b = b ^ (b >> 2); b =
-
C++で放物線の頂点・焦点・準線を求める方法
このチュートリアルでは、C++を使って放物線の頂点、焦点、準線を求める方法を学びます。放物線の方程式の係数として、x、y、z の3つの定数が与えられたものとします。 放物線の基本要素 放物線とは、2次関数をグラフに描いたときに現れる左右対称のU字形の曲線です。今回扱う主な要素は次の3つです。 頂点:放物線の最も高い(または低い)点で、グラフの対称軸上に位置します。 焦点:放物線の形状を決める特別な点。放物線上のどの点から見ても、焦点までの距離と準線までの距離は等しくなります。 準線:焦点とセットで放物線を定義する基準となる直線です。 頂点・焦点・準線を求める公式 放物線を y = xX2
-
C++で階乗の最初の桁を求めるプログラムの作成方法
このチュートリアルでは、与えられた数値の階乗(階乗値)の最初の桁(最上位桁)を求めるプログラムをC++で作成します。まず、具体的な例を見てみましょう。 入力 − 7 出力 − 5 これは、7の階乗が 7! = 5040 であり、その最初の桁が「5」であるためです。それでは、問題を解くための手順を確認していきましょう。 解き方の手順 対象となる数値を初期化します。 その数値の階乗を計算します。 階乗の値が1桁になるまで、10で割り続けます。 サンプルコード それでは、実際のコードを見てみましょう。 #include <bits/stdc++.h> using namespace
-
C++で数値配列の要素の積の最初の桁を求める方法
このチュートリアルでは、C++を使って配列の要素の積の最初の桁(先頭の桁)を求める方法を学びます。 まず、問題を解くための手順を確認しましょう。 配列を初期化します。 配列内のすべての要素の積を計算します。 その結果が10未満になるまで、10で割り続けます。 最後に残った1桁の数字を出力します。 コード例 それでは、実際のコードを見てみましょう。 #include <bits/stdc++.h> using namespace std; int productOfArrayDigits(int arr[], int n) { in
-
【C++】1からnまでの自然数を、指定した差と互いに素な合計を持つ2つの集合に分割できるか判定する方法
このチュートリアルでは、1からnまでの自然数を、次の条件を満たす2つのグループに分割できるかどうかを判定する方法を解説します。2つのグループの合計値の絶対差が、与えられた値mと一致すること2つの合計値の最大公約数(GCD)が1であること、つまり両者が互いに素(コプライム)であること考え方:数式によるアプローチ最初のn個の自然数の合計は、有名な公式 (n × (n + 1)) / 2 で求められます。全体の合計と目標となる差mが分かれば、連立方程式を解くことで、それぞれのグループの合計(sumOne・sumTwo)を簡単に導き出すことができます。sumOne + sumTwo = (n*(n+1
-
C++で文字列を1回走査して最初の非繰り返し文字を見つける方法
このチュートリアルでは、与えられた文字列の中から最初の非繰り返し文字(重複していない文字)を見つける方法を学びます。文字列をたった1回の走査で解ける効率的なアルゴリズムを、map(連想配列)を使って実装していきます。まずは具体例を見てみましょう。入力: tutorialspoint出力: u「tutorialspoint」の場合、最初に現れる重複していない文字は「u」です。それでは、この問題を解くための手順を確認しましょう。問題を解く手順対象となる文字列を初期化します。各文字の出現頻度とインデックスを保存するための、char型をキーとするmapを初期化します。文字列を先頭から順に走査します。各
-
C++で約数の個数がN個を超える最初の三角数を求める方法
このチュートリアルでは、約数の個数がn個より多い三角数をC++で見つける方法を解説します。 三角数とは? 三角数とは、1から始まる自然数を順に足し合わせたときに得られる数のことです。例えば、1、3(1+2)、6(1+2+3)、10(1+2+3+4)といった数が該当します。つまり、ある自然数k以下の数の総和が与えられた数と一致するとき、その数は三角数であるといえます。 三角数の概要が理解できたところで、問題を解くための手順を見ていきましょう。 解き方の手順 基準となる数nを初期化します。 条件を満たす数が見つかるまでループ処理を行います。 その数が三角数かどうかを判定します。 その数の約数の個
-
C++で文字列内の最初の大文字を見つける方法(反復処理・再帰処理)
このチュートリアルでは、C++を使って与えられた文字列の中から最初の大文字を見つける方法を解説します。反復処理(ループ)と再帰処理の2つのアプローチを取り上げます。まずは具体例から見ていきましょう。入力: Tutorialspoint出力: T方法1:反復処理(イテレーティブ)で解く反復処理を使った解法の手順は以下の通りです。文字列を初期化します。文字列を先頭から順に走査します。isupper 関数を使って、現在の文字が大文字かどうかを判定します。大文字が見つかった時点で、その文字を返します。サンプルコード#include <bits/stdc++.h> using namespa
-
C++で学ぶオペレーティングシステムの固定(静的)パーティショニング
固定パーティショニングとはこのチュートリアルでは、オペレーティングシステム(OS)における固定パーティショニング(Fixed Partitioning)、別名静的パーティショニングについて解説します。固定パーティショニングは、OSでメモリを管理するための古典的な手法の一つです。この方式では、メインメモリをあらかじめ決められたサイズのブロック(パーティション)に分割します。各ブロックのサイズは事前に定義されており、システムの稼働中に変更することはできません。分割された各パーティションには、連続した(コンティギュアスな)領域としてプロセスが1つずつ割り当てられます。固定パーティショニングの特徴メモ
-
C++で二分木の最も深い左葉ノードを見つける方法
このチュートリアルでは、C++を使って二分木の中から最も深い位置にある左葉ノード(deepest left leaf node)を見つける方法を解説します。まず、対象となる二分木の構造を確認しましょう。 A B CD E F Gこの木の場合、左側の子として接続されている葉ノードは「D」だけなので、答えは D となります。それでは、問題を解くための手順を順番に見ていきましょう。解決手順char型のデータと
-
C++で双方向リンクリストの指定位置にあるノードを削除する方法
このチュートリアルでは、C++を使って双方向リンクリスト(doubly linked list)から、指定された位置にあるノードを削除する方法を解説します。問題を解くための手順まずは、全体の流れを確認しましょう。データ本体と prev(前)・next(次)の2つのポインタを持つ構造体を定義します。双方向リンクリストにノードを挿入する関数を作成します。ダミーデータを使ってリンクリストを初期化します。削除対象となるノードの位置(position)を設定します。リンクリストを先頭から走査し、指定位置に該当するノードを見つけます。ノードを削除する関数を実装します。削除時には、以下の3つのケースを考慮す
-
C++で指定した位置の連結リストノードを削除する方法
はじめに このチュートリアルでは、単方向連結リスト(Singly Linked List)から、指定された位置にあるノードを削除する方法を解説します。まずは、問題を解決するための手順を確認していきましょう。 解決の手順 データ(data)と次ノードへのポインタ(next)を持つ構造体を定義します。 ノードを単方向連結リストの先頭に挿入する関数を作成します。 ダミーデータを使って単方向連結リストを初期化します。 削除対象ノードの位置を指定します。 連結リストを走査し、指定された位置にあるノードを特定します。 ノードを削除する関数を作成します。削除処理では、以下の3つのケースを考慮する必要があ
-
C++でヘッドポインタなしに片方向連結リストからノードを削除する方法
このチュートリアルでは、片方向連結リスト(シングルリンクリスト)において、ヘッドポインタなしでノードを削除する方法を解説します。通常、連結リストからノードを削除するには、削除対象ノードの直前のノードへのポインタが必要です。しかし、ヘッドポインタが渡されていない場合、前のノードをたどってたどり着くことができません。そこで役立つのが「次のノードのデータをコピーする」というテクニックです。解決の手順データ(data)と次ノードへのポインタ(next)を持つ構造体を定義する片方向連結リストにノードを挿入する関数を実装するダミーデータを使って連結リストを初期化するnextポインタを使って、削除対象ノード
-
C++で双方向連結リストのノードを削除する方法
はじめにこのチュートリアルでは、C++における双方向連結リスト(Doubly Linked List)からノードを削除する方法を解説します。双方向連結リストは、各ノードが前後両方のノードへのポインタを持つデータ構造であり、削除処理を行う際には隣接ノード同士のリンクを正しく繋ぎ直すことが重要です。解決の手順問題を解決するための手順は以下の通りです。data、prev、nextポインタを持つ構造体を定義します。双方向連結リストにノードを挿入する関数を記述します。ダミーデータを使って双方向連結リストを初期化します。削除対象のノードを指定します。ノードを削除する関数を記述します。削除時には以下の3つの
-
C++の単一リンクリストからすべての非素数ノードを削除する方法
このチュートリアルでは、C++を使って単一リンクリスト(片方向リンクリスト)から素数以外のノードをすべて削除する方法を解説します。まずは、問題を解決するための手順を確認していきましょう。データ(data)と次のノードへのポインタ(next)を持つ構造体を定義します。単一リンクリストにノードを挿入する関数を作成します。ダミーデータを使って単一リンクリストを初期化します。リンクリストを走査し、現在のノードのデータが素数かどうかを判定します。現在のデータが素数でない場合、そのノードを削除します。ノードを削除する関数を作成します。削除処理では、以下の3つのケースを考慮する必要があります。先頭ノードの場
-
C++で双方向連結リストから素数ノードをすべて削除する方法
このチュートリアルでは、C++を使って双方向連結リスト(ダブルリンクリスト)から、値が素数であるノードをすべて削除する方法を解説します。ノードの挿入、素数判定、そして安全なノード削除といった、連結リスト操作の基本が詰まった内容です。 アルゴリズムの手順 問題は以下の手順で解決できます。 data・prev・next を持つ Node 構造体を定義する 双方向連結リストの先頭にノードを挿入する関数を作成する ダミーデータで双方向連結リストを初期化する リストを先頭から順に走査し、各ノードの値が素数かどうかを判定する 素数であれば、そのノードを削除する ノード削除時の3つのケース ノードを
-
C++で単方向連結リストから素数ノードをすべて削除する方法
このチュートリアルでは、C++を使って単方向連結リスト(Singly Linked List)から、データが素数であるノードをすべて削除する方法を解説します。問題を解決する手順データと次ノードへのポインタを持つ構造体(struct)を定義します。連結リストにノードを挿入する関数を作成します。ダミーデータで単方向連結リストを初期化します。連結リストを走査し、現在のノードのデータが素数かどうかを判定します。現在のデータが素数であれば、そのノードを削除します。ノードを削除する関数を作成します。削除時には以下の3つのケースを考慮する必要があります。先頭ノードの場合:ヘッドポインタを次のノードに移動しま
-
C++で双方向リンクリストから偶数ノードをすべて削除する方法
このチュートリアルでは、C++を使って双方向リンクリスト(二重リンクリスト)から偶数のデータを持つノードをすべて削除する方法を解説します。解決の手順問題を解決するための流れは以下の通りです。データ(data)、前ポインタ(prev)、次ポインタ(next)を持つ構造体を定義します。双方向リンクリストに新しいノードを挿入する関数を作成します。ダミーデータを使って双方向リンクリストを初期化します。リンクリストを走査し、現在のノードのデータが偶数かどうかを判定します。データが偶数であれば、そのノードを削除します。ノードを削除する関数を作成します。削除時には以下の3つの場合分けを考慮する必要があります
-
C++で双方向リンクリストから指定した値より小さいノードをすべて削除する方法
このチュートリアルでは、C++を使って双方向リンクリスト(Doubly Linked List)から、指定した値よりも小さいデータを持つノードをすべて削除する方法を解説します。問題を解くための手順以下の手順に従ってプログラムを実装していきます。data(データ)、prev(前のノードへのポインタ)、next(次のノードへのポインタ)を持つ構造体を定義します。双方向リンクリストにノードを挿入する関数を作成します。サンプルデータを使って双方向リンクリストを初期化します。リンクリストを先頭から順に走査し、現在のノードのデータが指定した値より小さいかどうかを判定します。現在のデータが指定値より小さい場