C++

 Computer >> コンピューター >  >> プログラミング >> C++
  1. C++で曲線上の特定の点における接線を求める方法

    問題の概要 曲線 y = x(A − x) が与えられたとき、この曲線上の指定された点 (x, y) における接線の方程式を求めます。ここで A は整数、x と y もそれぞれ整数とします。 解法の考え方 接線を求める前に、まず与えられた点が実際に曲線上に存在するかどうかを確認する必要があります。点が曲線上にあることが確認できたら、次の手順で接線の方程式を導きます。 曲線の式を微分し、任意の点における傾き(微分係数)を求める 点の x 座標を微分結果に代入し、その点での接線の傾きを確定させる 接線の公式に点の座標と傾きを代入して方程式を完成させる ステップ1:曲線を微分する 曲線 y =

  2. 【C++】逆ピラミッド型の文字パターンを出力するプログラムの作り方

    本記事では、C++を使って逆ピラミッド型の文字パターンを出力するプログラムについて解説します。 問題の概要 逆ピラミッド(下向きの三角形)を構成する「行数」が与えられます。私たちの課題は、その行数に応じてアルファベットを出力し、逆ピラミッドの形を完成させることです。 たとえば5行が指定された場合、1行目には A〜E を対称に出力し、行が進むごとに文字数を1組ずつ減らしながら、中央に寄せていくことで逆ピラミッドを描きます。 C++による実装例 #include <bits/stdc++.h> using namespace std; // 逆ピラミッドパターンを出力する関数 void

  3. C++で二等辺三角形の高さと面積を求める方法

    二等辺三角形とは、3つの辺のうち2辺の長さが等しい三角形のことです。この記事では、等しい2辺の長さ a と底辺の長さ b が分かっているときに、その三角形の高さ(垂線の長さ)と面積をC++で求める方法を解説します。例として、3辺の長さが「2、2、3」の二等辺三角形を考えてみましょう。この場合、高さは約1.32、面積は約1.98になります。高さと面積を求める公式二等辺三角形では、頂点から底辺に下ろした垂線が底辺の中点を通るため、三平方の定理(ピタゴラスの定理)を使って高さを簡単に求められます。高さ h の公式h = √( a2 − ( b / 2 )2 )面積 A の公式A = ( 1 / 2

  4. C++で二分木における最も近い葉ノードまでの距離を求める方法

    二分木が与えられ、その葉ノードはそれぞれ異なるレベルに存在するとします。さらに、あるノードを指すポインタが与えられ、そのノードから最も近い葉ノードまでの距離を求める必要があります。例として、次のような二分木を考えてみましょう。この木における葉ノードは 2、-2、6 の3つです。もしポインタがノード -5 を指している場合、-5 から最も近い葉ノードまでの距離は 1 となります。解決のアプローチこの問題を解くには、次の手順で考えます。まず、指定されたノードを根とする部分木を走査し、その部分木内で最も近い葉ノードを見つけて距離を記録します。次に、木の根から全体を走査します。ノード x が左部分木に

  5. C++で2つの片方向リンクリストに共通するノードを検索して数える方法

    2つの片方向リンクリスト(単一リンクリスト)が与えられたとき、両方のリストに共通して存在するノードの総数を求める問題を考えてみましょう。例えば、2つのリストが [15, 16, 10, 9, 7, 17] と [15, 16, 40, 6, 9] の場合、共通する値は「15」「16」「9」の3つであるため、共通ノードの数は 3 となります。アルゴリズムの考え方最も基本的なアプローチは、ネストした2つのループを使って両方のリストを走査する方法です。具体的には以下の手順で処理を行います。最初のリストの各ノードについて、2番目のリスト内のいずれかのノードとデータが一致するかどうかを順番にチェックしま

  6. C++で円の直径(最長の弦)を求める方法

    円の幾何学において、直径は円の中心を通り、円周上の2点を結ぶ線分であり、同時にその円における最長の弦でもあります。ここでは、半径 r が与えられたときに、円の直径(最長の弦)を求める方法を解説します。例えば、半径が 9 であれば、直径は 18 になります。この問題は非常にシンプルです。直径は半径の2倍に等しいため、2 * r を計算するだけで求められます。C++での実装例#include<iostream> using namespace std; int getDiameter(int r) { return 2 * r; } int main() { int

  7. C++で配列をM回連結したときのK番目に小さい要素を求める方法

    問題の概要配列Aと、2つの整数K・Mが与えられたとします。このとき、配列Aを自分自身にM回連結した後の配列から、K番目に小さい要素を求める必要があります。例として、配列が A = [3, 1, 2]、K = 4、M = 3 の場合を考えてみましょう。配列Aを3回連結すると [3, 1, 2, 3, 1, 2, 3, 1, 2] となり、この中で4番目に小さい要素は「2」です。解法のアプローチ一見すると、実際に配列をM回連結して巨大な配列を作り、そこからK番目に小さい要素を探す必要があるように思えます。しかし、それではメモリ使用量や計算時間が無駄にかかってしまいます。ここで重要なポイントは、同じ

  8. C++でB!÷A!の最後の桁を求めるアルゴリズム

    問題の概要2つの整数AとBが与えられ、B ≥ Aが成り立つとき、B! / A! の最後の桁(下一桁)を求めることを考えます。例として、A = 2、B = 4 の場合を見てみましょう。2! = 2、4! = 24 なので、24 ÷ 2 = 12 となり、最後の桁は「2」になります。解法のポイント階乗の最後の桁は必ず {0, 1, 2, 4, 6} のいずれかに含まれるという性質があります。この性質を利用すると、巨大な階乗を実際に計算しなくても、以下の手順で効率的に答えを求められます。AとBの差(diff)を求めるdiff ≥ 5 の場合、答えは 0 になるdiff < 5 の場合は、(A

  9. C++でf[i] = f[i-1] − f[i-2]という規則に従う数列のN番目の項を求める方法

    数列 f の各項が f[i] = f[i-1] − f[i-2] という規則に従うとき、初項 f[0] = X、第2項 f[1] = Y が与えられた場合に、この数列のN番目の項を求める問題を考えます。例えば、X = 2、Y = 3、N = 3 のとき、答えは -2 になります。実際に順番に計算してみると、f[0] = 2、f[1] = 3、f[2] = 3 − 2 = 1、f[3] = 1 − 3 = −2 となるためです。周期性に着目した効率的な解法この数列を詳しく観察すると、6項ごとに同じパターンが繰り返されるという重要な性質があります。つまり、最初の6項さえ求めてしまえば、N番目の項は

  10. C++で同じ順序ですべての要素を含む最小の部分配列を見つける方法

    サイズ m と n の2つの配列があるとします。このとき、1つ目の配列の中から、2つ目の配列のすべての要素を含む最小長の部分配列(サブ配列)を見つけるのが課題です。重要なポイントとして、2つ目の配列の要素は1つ目の配列内で連続していなくても構いませんが、出現する順序は同じでなければなりません。具体例例えば、次のような2つの配列を考えてみましょう。A = [2, 2, 4, 5, 8, 9]B = [2, 5, 9]この場合、出力は 5 になります。なぜなら、A の中で条件を満たす最小の部分配列は [2, 4, 5, 8, 9] であり、B の要素 [2, 5, 9] がすべて同じ順序で含まれて

  11. 【初心者向け】Python Tkinterのdestroy()メソッドでウィジェットを破棄する方法

    Tkinterのdestroy()メソッドは、ウィジェットを破棄(削除)するためのメソッドです。相互に依存関係にある複数のウィジェットの挙動を制御したい場合に特に役立ちます。また、ユーザーの操作によって一連の処理が完了した後には、GUIコンポーネントを破棄してメモリを解放し、画面をきれいに片付ける必要があります。destroy()メソッドを使えば、こうした処理をすべて簡単に実現できます。destroy()メソッドの基本的な使い方以下の例では、画面上に3つのボタンを配置しています。1つ目のボタン:クリックするとウィンドウ自体を閉じます2つ目のボタン:クリックすると1つ目のボタンを消します3つ目の

  12. C++で ax − by = 0 を満たす最小の x と y を求める方法

    2つの整数 a と b が与えられたとき、ax − by = 0 を満たす最小の x と y を求めます。例えば、a = 25、b = 35 の場合、x = 7、y = 5 が答えになります。実際に確認すると、25 × 7 = 175、35 × 5 = 175 であり、両辺が等しくなることが分かります。 解法の考え方 この問題を解く鍵となるのは、最小公倍数(LCM)です。a と b の最小公倍数は、「両辺を等しくできる最も小さい値」に相当します。したがって、以下のように x と y を決定すればよいのです。 x = LCM(a, b) ÷ a y = LCM(a, b) ÷ b こ

  13. C++の二分探索で指定された精度の平方根を求める方法

    正の数 n と精度 p が与えられたとき、二分探索(バイナリサーチ)の手法を用いて、小数点以下 p 桁までの n の平方根を求める方法を解説します。例えば、n = 50、p = 3 の場合、出力は 7.071 となります。 アルゴリズムの手順 探索範囲を start := 0、end := n として初期化します。 中央値 mid の二乗と対象の数を比較します。一致していれば整数部が確定し、mid の二乗が小さければ右側へ、大きければ左側へ探索範囲を絞り込みます。 整数部の計算が完了したら、続いて小数部の計算に進みます。 増分変数を 0.1 で初期化し、小数部を p 桁まで順に計算します。各

  14. C++で数値とその最大素因数の合計を求める方法

    はじめに正の整数 n が与えられたとき、「n そのもの」と「n の最大素因数」の合計を求める問題を考えてみましょう。例えば、数が 26 の場合、26 を素因数分解すると 2 × 13 となるため、最大素因数は 13 です。したがって、求める合計は 26 + 13 = 39 となります。アルゴリズムの考え方アプローチはとてもシンプルです。対象の数を素因数分解し、最大の素因数を見つける元の数と最大素因数を足し合わせる結果を返す最大素因数の効率的な求め方すべての約数を総当たりで調べると非効率ですが、以下の手順に従えば O(√n) 程度の計算量で最大素因数を求められます。まず、数が 2 で割り切れる間

  15. C++で円の直径の端点から中心座標を求める方法

    はじめにプログラミングにおいて、幾何学的な計算は頻繁に登場する課題の一つです。本記事では、円の直径の両端点の座標が分かっている場合に、C++を使って円の中心座標を求める方法を解説します。問題の定義円の直径の端点として、2つの座標 (x1, y1) と (x2, y2) が与えられているとします。このとき、円の中心を求めることが目的です。例えば、2点が (-9, 3) と (5, -7) の場合、中心は (-2, -2) の位置にあることになります。解法の考え方円の中心は、直径の両端点を結ぶ線分の中点に一致します。したがって、2点の中点を求める公式をそのまま使えばよいことになります。2点の中点は

  16. C++でnより小さい最も近い「タイディ数」を求めるアルゴリズム

    「タイディ数(tidy number)」とは、すべての桁が非減少順(左から右へ向かって、等しいか大きくなっていく順序)に並んでいる数のことです。この記事では、ある数 n が与えられたとき、n 未満の数の中で最も近いタイディ数を求める方法を、C++のコード例とともに解説します。例えば n = 45000 の場合を考えてみましょう。45000 は「4 → 5」と増加した後、「5 → 0」と減少しているため、タイディ数ではありません。45000 未満で最も近いタイディ数は 44999 となります。アルゴリズムの考え方この問題は、次の手順で効率的に解くことができます。数を文字列として受け取り、右端(末

  17. C++で数字3と4のみを使用して作成できる、最大N桁の数の個数を求める

    問題概要 整数 N が与えられたとき、数字「3」と「4」のみを使って作成できる数の個数を求めます。たとえば、最大2桁までとすると、作成できる数は 3、4、33、34、43、44 の6個になります。 アプローチ この問題は、規則性に注目することで簡単に解くことができます。1桁の数は「3」と「4」の2個、2桁の数は「33」「34」「43」「44」の4個あります。同様に、m桁の数は 2m 個存在します。 したがって、最大N桁までに作成できる数の総数は、等比数列の和の公式より次のように表せます。 21 + 22 + … + 2N = 2(N+1) − 2 実装例(C++) #include<io

  18. C++で厳密に減少する部分配列の個数を効率的に求める方法

    厳密に減少する部分配列とは配列 A が与えられたとき、長さが 2 以上の「厳密に減少する部分配列」が全部でいくつ存在するかを求めます。ここで「厳密に減少する」とは、隣り合う要素が必ず左から右へ向かって小さくなっていることを意味します。例として、A = [100, 3, 1, 15] を考えてみましょう。この場合、条件を満たす部分配列は [100, 3]、[100, 3, 1]、[3, 1] の 3 つとなるため、答えは 3 です。アルゴリズムの考え方すべての部分配列を列挙して一つずつ判定する方法もありますが、計算量が O(n²) となり非効率です。そこで、次のような性質を利用します。長さ l

  19. C++でアルファベット順に並ぶ部分文字列の個数を求める方法

    問題の概要長さ n の文字列を考えます。この文字列には大文字のアルファベットのみが含まれており、その中から「各文字がアルファベット順(A→B→C…)に連続して並んでいる」部分文字列の個数を求めます。なお、部分文字列の最小サイズは 2 とします。例えば、文字列が「REFJHLMNBV」の場合、条件を満たす部分文字列は「EF」と「MN」の 2 つとなります。解決のための手順この問題は、文字列を一度走査するだけで効率的に解くことができます。手順は以下の通りです。隣り合う文字同士を比較し、str[i] + 1 が str[i + 1] と等しい(=文字コード上で1つずつ連続している)かどうかを確認しま

  20. C++で指定した条件に基づいて変化させたときの最終的なXとYの値を求める方法

    2つの正の整数 X と Y の初期値が与えられているとします。以下の手順に従って値を変化させていったとき、最終的に残る X と Y の値を求めるのが本記事のテーマです。処理のルールステップ1:X = 0 かつ Y = 0 の場合は処理を終了します。それ以外の場合はステップ2へ進みます。ステップ2:X >= 2Y が成立する場合は X = X − 2Y としてステップ1へ戻ります。成立しない場合はステップ3へ進みます。ステップ3:Y >= 2X が成立する場合は Y = Y − 2X としてステップ1へ戻ります。どちらの条件も成立しない場合は処理を終了します。効率化のポイントX と

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