C++で正六角形の対角線の長さを求める方法
この問題では、正六角形の一辺の長さを表す整数 n が与えられます。私たちの課題は、その正六角形の対角線の長さを求めることです。
問題の概要
ここでは、正六角形の一辺の長さが与えられ、その六角形の対角線の長さを計算する必要があります。
具体例で理解しよう
- 入力: a = 7
- 出力: 12.11
解き方のアプローチ
この問題は、次の数学的な公式を使うことで簡単に解くことができます。
対角線 = 1.73 × a
公式の導出過程
一辺の長さが a の正多角形(正六角形)を考えます。
対角線と辺がなす角度は 60° です。
(d/2) と a の比は sin 60° に等しくなります。
sin 60° = d / (2 × a)
0.866 = d / (2 × a)
d = 0.866 × 2 × a
d = 1.73 × a
このように、対角線の長さは一辺の約1.73倍であることが導けます。
C++プログラムの実装例
それでは、この解法の動作を確認するプログラムを見てみましょう。
#include <iostream>
using namespace std;
int main() {
float a = 12;
float d = 1.73 * a;
cout << "対角線の長さは " << d;
return 0;
}実行結果
対角線の長さは 20.76
まとめ
正六角形の対角線の長さは、三角関数の性質から「一辺 × 1.73」というシンプルな公式で求められることが分かりました。C++では、この公式を実装するだけで O(1) の計算量で答えを得ることができます。
-
C++でN番目の偶数長回文数を求める方法をわかりやすく解説
C++を使ったことがある人なら、「回文(パリンドローム)」という言葉を耳にしたことがあるでしょう。この記事では、「N番目の偶数長回文数」について、具体例を交えながらすべて解説します。 回文とは、逆から読んでも元と同じになる数字や単語のことです。数字だけでなく、文字を反転してもつづりが変わらない単語も回文と呼ばれます。例えば以下の通りです。 数字 = {1, 121, 131, 656, 1221, 1551} 単語 = {saas, malayalam, level, mom} 一見複雑に見えますが、実際にプログラムで実装すると非常にシンプルです。それでは、回文について詳しく見ていきましょう。
-
C++で連結リストのループ(循環部分)の長さを求める方法
この記事では、ループ(循環)を含む可能性がある連結リストが与えられたときに、そのループの長さ(ループ内のノード数)を求める方法を解説します。 問題の概要 与えられた連結リストにループが存在する場合は、ループを構成するノードの数を数えて返します。ループが存在しない場合は -1 を返します。 具体例を見てみましょう。 入力: 連結リスト:1 → 2 → 3 → 4 → 5 → 6 → 7 → 2(ノード2に戻る) 出力: 6 この例では、ノード7の次がノード2に接続されており、ノード2からノード7までの6個のノードがループを形成しています。 解決アプローチ:フロイドの循環検出法 まず、連結リス