C++で初項と公差が与えられた等差数列(AP)に特定の数値が含まれるか判定する方法
等差数列(Arithmetic Progression:AP)の初項 a と公差 d が与えられたとき、指定した数値 x がその数列の項として存在するかどうかを判定する問題について解説します。
例えば、初項 a = 1、公差 d = 3 の場合、数列は 1, 4, 7, 10, ... となります。ここで x = 7 が数列に含まれるかを調べると、答えは「はい」となります。
解法のアプローチ
この問題は、以下の手順で効率的に解くことができます。
- 公差 d が 0 の場合: 数列は定数列になるため、
a == xであれば true を返し、そうでなければ false を返します。 - 公差 d が 0 でない場合:
xが一般項x = a + n × d(n は非負の整数)を満たすかを確認します。具体的には、(x - a) % d == 0かつ(x - a) / d >= 0が成り立てば、xは数列の項です。
サンプルコード
#include <iostream>
using namespace std;
bool isInAP(int a, int d, int x) {
if (d == 0)
return (x == a);
return ((x - a) % d == 0 && (x - a) / d >= 0);
}
int main() {
int a = 1, x = 7, d = 3;
if (isInAP(a, d, x))
cout << "The value " << x << " is present in the AP";
else
cout << "The value " << x << " is not present in the AP";
}出力結果
The value 7 is present in the AP
処理のポイント
このアルゴリズムの計算量は O(1) であり、ループを使って数列の各項を順番に比較する必要がありません。(x - a) が公差 d で割り切れること、そしてその商が 0 以上であることを確認するだけで、x が数列に含まれるかを即座に判定できます。特に、負の公差を持つ数列にも対応できる点が実用上重要です。
-
C++で与えられた点から作成できる四角形の数を求める方法
四角形とは? 四角形(クアドララテラル)とは、ユークリッド平面上で4つの頂点と4つの辺を持つ多角形のことを指します。「4-gon」という呼び方もあり、正方形や長方形なども四角形の一種に含まれます。 本記事では、与えられた点から作成できる四角形の数を求める手法について解説します。この問題では、直交座標系(XY平面)上に与えられた4つの点 (x, y) を用いて、いくつの四角形を構成できるかを求めます。まず、具体的な入力例と出力例を見てみましょう。 入力 : A( -2, 8 ), B( -2, 0 ), C( 6, -1 ), D( 0, 8 ) 出力 : 1 説明 : 作成できる四角形は1つだ
-
C++とオイラー特性でサッカーボールの五角形・六角形の数を求める方法
サッカーボールをよく見ると、黒い五角形と白い六角形がパズルのように組み合わさり、完璧な球体を形作っていることがわかります。本記事では、オイラー特性(Euler characteristic)という数学的手法を用いて、サッカーボール上に存在する五角形と六角形の数を求める方法を解説し、最後にC++での実装例も紹介します。 オイラー特性とは オイラー特性とは、位相空間における図形や構造の特徴を表す数値です。球面の場合、オイラー特性は常に2になることが知られており、この性質を利用することで、サッカーボール上の五角形と六角形の数を計算できます。 オイラー特性では、以下の要素を使用します。 χ(S) —