C++でn個の円の最大交点数を求める方法
このチュートリアルでは、n個の円が作り得る交点の最大数を求めるプログラムについて解説します。
与えられるのは円の個数 n のみです。その個数の円同士が取り得る交点の最大数を計算するのが私たちの課題となります。
考え方
まず数学的な背景を確認しておきましょう。平面上の2つの円は、最大で2つの交点を持ちます。n個の円から選べるペア(組み合わせ)の数は n(n−1)/2 通りあるため、各ペアごとの最大交点数である2を掛けると、全体の交点の最大数は次の式で表せます。
n × (n − 1)
例えば円が3個の場合は 3 × 2 = 6 個の交点が理論上の最大値になります。
サンプルコード
#include <bits/stdc++.h>
using namespace std;
// 最大交点数を返す関数
int intersection(int n) {
return n * (n - 1);
}
int main() {
cout << intersection(3) << endl;
return 0;
}実行結果
6
このように、複雑な幾何計算を行わなくても、単純な式 n(n−1) を使うことで、n個の円が作り得る交点の最大数を効率的に求めることができます。
-
C++で2つの連結リストの交点を見つける方法
連結リストとは連結リスト(Linked List)は線形データ構造の一種です。各ノードは2つの部分で構成されており、一方にはノードの値(データ)が、もう一方には次のノードへのアドレス(ポインタ)が格納されています。ここでは、各ノードがリスト内の他のノードを指すポインタを持つ連結リストを想定します。この問題のタスクは、2つの連結リストが交差するノードを見つけることです。交差していない場合は、NULL(空)を出力として返します。入力例1出力:2解説: 与えられた連結リストは値「2」のノードで交差しているため、「2」を出力として返します。入力例2出力:NULL解説: 共通するノードが存在しないため、
-
C++で四辺形の最大面積を求める方法
問題文 四辺形の4つの辺 a、b、c、d が与えられたとき、それらの辺から構成できる四辺形の最大面積を求めることを考えます。 アルゴリズム この問題は、古代インドの数学者ブラーマグプタ(Brahmagupta)による次の公式を利用することで解くことができます。 √(s−a)(s−b)(s−c)(s−d) ここで、s は半周長(semi-perimeter)と呼ばれる値であり、次のように計算します。 S = (a + b + c + d) / 2 なお、ブラーマグプタの公式は本来、円に内接する四辺形に対して成立するものですが、与えられた4つの辺の長さを持つすべての四辺形の中では、円に内接する四