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

【C++入門】n辺の凸多角形の対角線の数を求める方法

問題の概要

整数 n が与えられたとき、n 辺の凸多角形が持つ対角線の本数を求める問題を考えます。例えば n = 5(五角形)の場合、対角線の数は 5 本になります。

対角線の数を求める数式

n 辺の凸多角形では、各頂点から対角線を引ける相手は、自分自身と両隣の 2 つの頂点を除いた残りの頂点です。つまり、1 つの頂点あたり n − 3 本の対角線を引くことができます。

したがって、n 個の頂点全体では n × (n − 3) 本の対角線が数えられます。しかし、この数え方では各対角線を両端の頂点から 2 回ずつ重複して数えてしまいます。そこで 2 で割ることで、実際の対角線の総数が求められます。

対角線の総数 = n × (n − 3) / 2

例えば n = 5 の場合、5 × (5 − 3) / 2 = 5 となり、五角形の対角線が 5 本であることが確認できます。

C++での実装例

#include<iostream>
using namespace std;

int diagonalCount(int n) {
    return n * (n - 3) / 2;
}

int main() {
    int n = 8;
    cout << n << " sided convex polygon has " << diagonalCount(n) << " diagonals";
}

実行結果

8 sided convex polygon has 20 diagonals

この例では n = 8(八角形)を渡しており、8 × (8 − 3) / 2 = 20 より、対角線が 20 本であることが正しく出力されています。

まとめ

n 辺の凸多角形の対角線の数は、各頂点から引ける n − 3 本の対角線に頂点数 n を掛け、重複分を除くために 2 で割ることで求められます。計算量は O(1) と非常に効率的で、n が大きくなっても即座に答えを得られるのがポイントです。

  1. C++で数値の立方根を求める方法:二分探索を使った実装を解説

    はじめにこの記事では、数値の立方根(3乗根)を求める方法を解説します。例えば、27という数値の立方根は3です。ここでは、標準ライブラリの関数に頼らず、独自のロジックでこの問題を解決します。具体的には「二分探索(バイナリサーチ)」の手法を活用します。アルゴリズムの考え方まず、許容誤差(しきい値)として threshold = 0.000001 を設定します。その上で、以下の手順に従って処理を進めます。左端の値(left)を 0、右端の値(right)を対象の数値として初期化する中央値を mid = (left + right) / 2 として計算する|数値 − mid³| が threshold

  2. C++で整数の1の補数(nビット)を求める方法

    1の補数とは本記事では、整数の「1の補数」を求める方法について解説します。C++には補数演算子(~)が用意されており、これを使えば非常に高速に補数を計算できます。ただし、この演算子は32ビット(4バイト)全体に対して補数を求めてしまうため、ここでは「与えられた数値のビット数分だけの補数」を取得する方法を考えます。例として、22という数値を取り上げます。22の2進表現は「10110」であり、その1の補数は「01001」、つまり10進数の9になります。では、この値はどのようにして求めればよいのでしょうか。求め方の手順まず、対象の数値のビット数を求めます。この値をcとします(22の場合、c = 5)