C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++で直角三角形の残りの2辺を求める方法を解説

この問題では、直角三角形の一辺を表す整数 a が与えられます。その一辺を持つ直角三角形が成り立つかどうかを判定し、成り立つ場合には残りの2辺を求めることが課題です。

入出力の例

入力

a = 5

出力

Sides : 5, 12, 13

説明

52 + 122 = 132 という関係が成立するため、残りの2辺は 12 と 13 であることがわかります。

解法のアプローチ

この問題の最もシンプルな解法は、三平方の定理(ピタゴラスの定理)を利用することです。直角三角形の3辺は必ず次の関係を満たします。

a2 + b2 = c2

ここで、a と b は直角を挟む2辺、c は斜辺を表します。この定理をもとに、与えられた a から b と c の値を導き出します。

ケース1: a が偶数の場合

b = (a2/4) − 1
c = (a2/4) + 1

これは a = 2m とおくと、b = m2 − 1、c = m2 + 1 となり、a2 + b2 = (m2+1)2 = c2 が常に成立するためです。

ケース2: a が奇数の場合

b = (a2 − 1) / 2
c = (a2 + 1) / 2

a が奇数なら a2 も奇数になるため、(a2−1)/2 と (a2+1)/2 は連続する整数となり、これらを代入すると三平方の定理が成立します。

注意点: a = 1 および a = 2 の場合には、整数の辺で直角三角形を構成できないため、「−1」を出力して解がないことを示します。

プログラムの実装

上記の解法をC++で実装したコードが以下です。

サンプルコード

#include <bits/stdc++.h>
#include <cmath>
using namespace std;
#define PI 3.1415926535

void printOtherSides(int n) {
   int b, c;
   if (n & 1) { // nが奇数の場合
      if (n == 1)
         cout << -1 << endl;
      else {
         b = (n*n - 1) / 2;
         c = (n*n + 1) / 2;
      }
   } else { // nが偶数の場合
      if (n == 2)
         cout << -1 << endl;
      else {
         b = n*n/4 - 1;
         c = n*n/4 + 1;
      }
   }
   cout << "Sides : a = " << n << ", b = " << b << ", c = " << c << endl;
}

int main() {
   int a = 5;
   printOtherSides(a);
   return 0;
}

実行結果

Sides : a = 5, b = 12, c = 13

計算量

この解法は分岐と四則演算のみで構成されているため、時間計算量・空間計算量ともに O(1) で動作します。入力値が大きくなっても即座に結果を得られるのが特徴です。

まとめ

直角三角形の一辺が既知の場合、三平方の定理の性質を利用することで、偶数・奇数それぞれの場合分けによる公式で残りの2辺を効率的に求められます。ただし、a = 1 や a = 2 といった解が存在しないケースの扱いに注意が必要です。

  1. C++で直角二等辺三角形に収まる正方形の最大数を求める方法

    この記事では、底辺の長さが「s」である直角二等辺三角形の中に、一辺「a」の正方形を最大でいくつ収めることができるかを求める問題を解説します。二等辺三角形とは、少なくとも2つの等しい辺を持つ三角形のことです。 まず、具体例を使って何をすべきかを理解しましょう。 入力例 s=5, a=1 出力 10 説明 − 底辺に並べられる正方形の数は、「s を a で割って 1 を引く」ことで求められます。つまり、底辺の正方形の数 = 5/1 − 1 = 4 個です。 同様に、最下段に4つの正方形を配置すると、その上に底辺が (s−a) の新しい二等辺三角形ができます。同じ手順を繰り返すと3個、さらにその上

  2. C++で三角形の重心を求めるプログラムの作成方法

    この記事では、三角形の3つの頂点の座標を格納した2次元配列が与えられたときに、その三角形の重心を求めるC++プログラムの作成方法を解説します。 三角形の重心とは、三角形の3本の中線がすべて交わる点のことです。 また、三角形の中線とは、ある頂点と、その対辺(向かい合う辺)の中点を結ぶ線分のことを指します。 それでは、具体的な例を使って問題を確認してみましょう。 入力 (-3, 1), (1.5, 0), (-3, -4) 出力 (-1.5, -1) 説明 重心 (x, y) = ((-3 + 1.5 - 3) / 3, (1 + 0 - 4) / 3) = (-1.5, -1) 解法のアプロ