-
【C++】数列 4, 14, 28, 46, 68, 94, 124, 158, … のN番目の項を求めるプログラム
この問題では、数値Nが与えられます。求めるのは、数列 4, 14, 28, 46, 68, 94, 124, 158, … のN番目の項の値です。本記事では、C++を使ってこのN番目の項を計算するプログラムの作成方法を解説します。 問題の概要 数列 4, 14, 28, 46, 68, 94, 124, …(N項) の一般項を導き出し、与えられたNの値に基づいて対応する項の値を計算します。 入出力例 まず、具体例で問題を確認しましょう。 入力: N = 5 出力: 68 解法アプローチ 最初に、与えられた数列の一般項を導きます。対象となる数列は次のとおりです。 4, 14, 28,
-
C++で数列7、21、49、91、147、217、……のN番目の項を求めるプログラム
この記事では、数列のN番目の項を表す整数nが与えられたとき、C++を使って数列「7、21、49、91、147、217、……」のN番目の項を求めるプログラムを作成します。問題の説明数列7、21、49、91、147、217、…のN番目の項を求めることが課題です。そのために、まず数列の一般項を導き出します。入力例: N = 5出力例: 147解法アプローチ与えられた数列を見てみましょう。7, 21, 49, 91, 147, 217, …すべての項には共通して7が含まれているため、7でくくり出すことができます。7 × (1, 3, 7, 13, 21, 31, ...)括弧内の数列を観察すると、各項
-
【C++】数列 9, 23, 45, 75, 113… のN番目の項を求めるプログラム
この問題では、整数 n が与えられ、それが数列の何番目の項であるかを表します。私たちの課題は、C++ を使って数列「9, 23, 45, 75, 113…」の N 番目の項を求めるプログラムを作成することです。 問題の概要 ここで求めるべきは、与えられた数列の一般項を導き出し、その式から第 n 項の値を計算することです。 対象となる数列は次のとおりです。 9, 23, 45, 75, 113, 159, 213, … 入出力例 入力: n = 5 出力: 159 解法アプローチ まず、隣り合う項同士の差に注目してみましょう。 23 − 9 = 14 45 − 23 = 22 75
-
C++で二次方程式の解の個数を求めるプログラム
はじめに本記事では、定数 a、b、c を係数とする二次方程式 ax2 + bx + c が与えられたとき、その実数解の個数を求めるC++プログラムの作成方法を解説します。問題の概要二次方程式は最大で2つの解を持ちます。与えられた方程式がいくつの解を持つのかを、判別式を用いて判定するのがこの課題の目的です。例1入力: 3x2 + 7x + 4出力: 2説明: 方程式を因数分解すると (3x + 4)(x + 1) = 0 となり、解は x = −4/3 と x = −1 の2つです。例2入力: x2 − 4x + 4出力: 1説明: (x − 2)2 = 0 となり、重解 x = 2 のみを持つ
-
C++でチェス盤に含まれる正方形の総数を求めるプログラム
この記事では、チェス盤のサイズ n が与えられたとき、その盤面に含まれるすべての正方形の総数をC++で求めるプログラムを解説します。 問題の概要 チェス盤に含まれる正方形の数を求めるには、盤面の内部に存在する正方形をすべてのサイズについて数える必要があります。具体的には、1×1、2×2、3×3 … n×n のように、各サイズごとの正方形の組み合わせをすべて合計します。 具体例 入力: n = 4 出力: 30 1×1 の正方形 → 16 個 2×2 の正方形 → 9 個 3×3 の正方形 → 4 個 4×4 の正方形 → 1 個 正方形の総数 = 16 + 9 + 4 + 1 = 30
-
C++でユーザー入力のデータ型を判定するプログラムの作り方
この記事では、ユーザーから受け取った入力値が「整数」「浮動小数点数」「文字列」のどれに該当するのかを自動的に判別するC++プログラムの作成方法を解説します。問題の概要ユーザーからの入力を受け取り、その入力値がどのデータ型に属するかを判定します。例1入力: 34出力: 整数です例2入力: tutorialspoint出力: 文字列です解決アプローチ判定の手順は以下の通りです。まず、入力された文字列が数値として解釈できるかどうかを確認します。数値である場合は、さらに整数なのか浮動小数点数なのかを判定します。数値として解釈できない場合は、文字列と判断します。サンプルコード#include <m
-
C++で数値のパリティ(奇偶性)を求めるプログラム
このチュートリアルでは、C++を使って数値のパリティ(奇偶性)を求める方法について解説します。パリティとは、ある数値を2進数で表したときに含まれる「1」の個数が、奇数であるか偶数であるかを指します。本記事では、入力として与えられた数値のパリティを効率的に判定するアルゴリズムを紹介します。パリティの求め方ここで紹介する手法では、ビット演算を活用します。ポイントとなるのは n & (n - 1) という式です。この式は、n の最下位にある「1」のビットを消去する働きがあります。この操作を n が 0 になるまで繰り返し、ループが回った回数(=1のビットの個数)から奇偶を判定します。C++での実装例
-
C++で正方形と長方形の外周(周囲の長さ)を求めるプログラム
この記事では、正方形の1辺の長さ(a)、および長方形の縦と横の長さ(l・b)が与えられたときに、それぞれの外周(周囲の長さ)を計算するC++プログラムの作成方法を解説します。 問題の概要 正方形の外周を求めるには、1辺の長さ(a)が必要です。計算には、正方形の外周を求める公式 4 × a を使用します。 長方形の外周を求めるには、縦の長さ(l)と横の長さ(b)が必要です。計算には、長方形の外周を求める公式 2 × (l + b) を使用します。 正方形の外周(周囲の長さ)を求める 正方形とは、4つの辺がすべて等しく、4つの内角がすべて90度である四辺形のことです。 正方形の外周(周囲の長
-
【C++】指定した範囲内の素数を見つけるプログラムの作り方
このチュートリアルでは、指定された範囲(区間)内に存在する素数を見つけるC++プログラムについて解説します。ここでは、下限と上限となる2つの整数が与えられ、その範囲内のすべての素数を出力するプログラムを作成します。アルゴリズムの考え方素数とは、1とその数自身以外に正の約数を持たない、1より大きい自然数のことです。本プログラムでは、以下の手順で素数を判定します。範囲内の各整数 i に対して、2から i / 2 までの数で順番に割り切れるかどうかを確認します。1つでも割り切れる数が見つかった場合、その数は素数ではありません。最後まで割り切れる数が見つからなければ、その数は素数として出力します。0と
-
C++で大きな数値を11で割った余りを求めるプログラム
問題の概要この問題では、非常に大きな数値を表す文字列 num が与えられます。私たちの課題は、この大きな数値を11で割った余りを求めるプログラムをC++で作成することです。問題の説明文字列として定義された数値を11で割ったときの余りを求める必要があります。数値が long long 型の範囲を超えるようなケースでも正しく計算できることがポイントです。入出力例入力num = 43212981843718452出力7解決アプローチ余りを求めるには、本来ならば数値をそのまま11で割ればよいのですが、桁数が非常に多い数値の場合、標準的な整数型では扱えず、多倍長整数による除算は複雑な処理になってしまいま
-
C++で大きな数値をrで割った余りを求めるプログラム
この記事では、大きな数値を表す文字列 num と整数 R が与えられたときに、その大きな数値を r で割った余りを求める C++ プログラムを作成します。問題の概要文字列として定義された巨大な数値を、2桁の整数 r で割ったときの剰余(余り)を求めることが課題です。具体的な例を見て、問題を理解しましょう。入力num = 123423450942121r = 54出力7解法アプローチ余りを求めるには、当然ながら割り算を行う必要があります。しかし、非常に大きな数値同士の割り算は複雑な処理になりがちです。そこで、処理を簡単にするために「1桁ずつ」割り算を行う手法を採用します。具体的には、次の手順で計
-
C++で剰余演算子(%)を使わずに余りを求めるプログラム
この記事では、2つの整数NとDが与えられたとき、C++で剰余演算子(%)を使用せずに余りを求めるプログラムの作成方法を解説します。問題の概要数値NをDで割ったときに余る値を求めるのが課題です。ただし、モジュロ演算子(%)は使用できません。入力例N = 53 D = 3出力例2解法1:Dの倍数を利用する方法最もシンプルなアプローチは、N以下で最大のDの倍数を見つけ、Nからその値を引くことで余りを求める方法です。ループでDの倍数を順に確認し、Nを超えた時点で直前の倍数を使えば、余りが計算できます。実装例#include <iostream> using namespace std; i
-
C++で割線法(セカント法)を使って方程式の根を求めるプログラム
このチュートリアルでは、C++を使用して割線法(セカント法)により方程式の根を求めるプログラムを紹介します。 割線法は、数値解析における代表的な求根アルゴリズムの一つです。導関数を必要とせず、2つの初期値から反復計算を行うことで解に収束させられるため、ニュートン法の代替手法としても広く利用されています。ここでは、与えられた方程式の根を、この反復的な割線法を用いて求める手順を解説します。 割線法の仕組み 割線法では、まず方程式 f(x) = 0 の解が含まれると期待される2つの初期値 x1 と x2 を選びます。このとき、f(x1) と f(x2) の符号が異なること(f(x1) × f(x
-
C++で文字列内の2番目に頻度の高い文字を見つけるプログラム
この問題では、文字列 str が与えられます。私たちの課題は、C++で文字列内に2番目に出現頻度が高い文字を見つけるプログラムを作成することです。入力例で問題を理解しよう入力str = abaacabcba出力bこの例では、文字 a が5回、b が3回、c が2回出現しています。最も頻度が高いのは a なので、2番目に頻度の高い文字である b が出力されます。解決アプローチ文字列の中で2番目に頻度の高い文字を見つけるには、以下の手順を実行します。まず、各文字の出現回数を格納するためのカウント配列(charFreq)を用意します。文字列を1文字ずつ走査しながら、対応する配列要素のカウントを増やし
-
C++で双方向リンクリストのサイズ(要素数)を求めるプログラム
本記事では、双方向リンクリスト(Doubly Linked List)が与えられたときに、そのサイズ(要素数)を求めるC++プログラムの作成方法を詳しく解説します。 双方向リンクリストとは、片方向リンクリストと比べて、各ノードが前後両方向のリンクを持つため、前方にも後方にも自由に移動できる特殊なリンクリストです。まず、双方向リンクリストを理解するうえで重要な用語を確認しておきましょう。 リンク(Link):リンクリストの各リンクには、「要素」と呼ばれるデータが格納されます。 ネクスト(Next):各リンクには、次のリンクを指す参照「Next」が含まれます。 プレヴ(Prev):各リンクに
-
C++で直線の傾きを求めるプログラム
この問題では、直線上の2点の座標が与えられます。私たちのタスクは、C++で直線の傾きを求めるプログラムを作成することです。 問題の説明 与えられた直線上の2点の座標を利用して、その直線の傾きを求めます。 まずは具体例を使って問題を理解しましょう。 入力 p1(-1, 1), p2(3, 3) 出力 1/2 = 0.5 解法のアプローチ 直線の傾きを求めるには、直線上の任意の2点 P1(x1, y1) と P2(x2, y2) から傾きを計算する、幾何学で定義された公式を使用します。 傾き = (Y2 - Y1) / (X2 - X1) この公式は、y方向の変化量(縦の伸び)をx方向の変化量
-
【C++】文字列内の最短語と最長語を検索するプログラムの作成方法
問題概要 本記事では、与えられた文字列 str の中から最も短い単語(最短語)と最も長い単語(最長語)を検索するプログラムをC++で作成する方法を解説します。 問題の説明 ― 文字列が1つ与えられます。その文字列に含まれるすべての単語の中から、文字数が最も多い単語と最も少ない単語を求めます。なお、単語は半角スペースまたはNULL文字('\0')で区切られているものとします。 入力例 str = “Learn Programming at TutorialsPoint” 出力例 smallest word = at largest word = Tutor
-
C++で円を2つの部分に分割したときの角度差の最小値を求めるプログラム
この記事では、円を構成する各部分(扇形)の角度が格納された配列が与えられたとき、それらを連続的につなぎ合わせて2つの部分に分割した場合の角度差の最小値を求めるC++プログラムを解説します。問題の概要円全体(360度)を構成するすべての部分の角度が配列として与えられます。これらの部分を連続する範囲ごとに結合して2つのグループを作り、それぞれのグループの角度の合計の差が最小になるようにします。重要なのは、離れた位置にある部分(例えば最初の部分と3番目の部分など)を一緒にすることはできないという点です。入力例で理解しましょう入力ang[] = {90, 45, 90, 135}出力90説明1つ目と2
-
C++でソート済みの2つの配列の中央値を求める方法【二分探索】
問題概要2つのソート済み配列が与えられ、それらを合わせた全体の中央値を求めます。例えば、配列が [1,5,8] と [2,3,6,9] の場合、マージすると [1,2,3,5,6,8,9] となり、中央の要素である 5 が答えになります。この問題は、単純に2つの配列をマージしてから中央値を取り出す方法(計算量 O(m+n))でも解けますが、二分探索を活用することで、O(log(min(m, n))) まで計算量を抑えることができます。ポイントは「短い方の配列」だけを対象に二分探索を行い、両配列を左右半分に分ける適切な分割位置(パーティション)を見つけることです。アルゴリズムの手順関数 find
-
C++で連結リストをk個ずつ反転するアルゴリズムの解説
連結リストが与えられたとき、k個ずつのグループに分けてノードを反転し、変更後のリストを返すことを考えます。ここでkは正の整数であり、連結リストの長さ以下であるものとします。また、ノード数がkの倍数でない場合、末尾に余ったノードは元の順序のまま維持します。例えば、連結リストが [1,2,3,4,5,6,7] で k = 3 の場合、出力は [3,2,1,6,5,4,7] となります。最初の3ノード(1,2,3)が「3,2,1」に、次の3ノード(4,5,6)が「6,5,4」に反転され、残りの7はそのままの位置に留まります。アルゴリズムの考え方この問題は、再帰を利用した以下の手順で解くことができます