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

C言語で十角数(デカゴナル数)を求めるプログラムの解説

十角数とは

十角数(デカゴナル数)とは、三角数や平方数の概念から派生した多角数(図形数)の一種です。この数列パターンは、回転対称ではない図形の考え方をもとに構成されており、「入れ子状に重なった十角形の中に置かれた点の総数」として定義されます。

図を使った十角数の考え方

十角数は、複数の十角形を入れ子状に重ねた図形で視覚的に理解できます。各外周の十角形には、十角形の辺の数(10)に応じた点が配置され、中心に向かって層状に積み重なっていきます。

例として、ある十角数を図形で表すと次のように数えることができます。

  • 最も外側の図形の辺上の点:30個
  • 2番目の外側の図形の辺上の点:20個
  • 内側の図形の辺上の点:10個
  • すべての層で共通する部分:6 + 2個(引く必要がある)

したがって、合計は 30 + 20 + 10 − (6 + 2) = 52 となります。

十角数の一般式

このような計算は、次の一般式で表すことができます。

D(n) = 4n² − 3n

この式に n を代入するだけで、n番目の十角数を簡単に求められます。実際、十角数の数列は以下のように進みます。

  • n = 1 のとき:4 − 3 = 1
  • n = 2 のとき:16 − 6 = 10
  • n = 3 のとき:36 − 9 = 27
  • n = 4 のとき:64 − 12 = 52

十角数を求めるCプログラム

上記の公式を使えば、C言語で簡単に十角数を計算できます。以下は、ユーザーが入力した n に対して n番目の十角数を出力するサンプルプログラムです。

#include <stdio.h>

// n番目の十角数を返す関数
int decagonalNumber(int n) {
    return 4 * n * n - 3 * n;
}

int main(void) {
    int n;

    printf("n の値を入力してください: ");
    scanf("%d", &n);

    printf("第%d十角数は %d です\n", n, decagonalNumber(n));

    return 0;
}

実行例

n の値を入力してください: 4
第4十角数は 52 です

このように、十角数は「4n² − 3n」というシンプルな式で表現できるため、プログラムでも定数時間 O(1) で高速に計算できます。図形数は他にも三角数・四角数・五角数など多くの種類があり、それぞれ類似の多項式で表されるのも興味深いポイントです。

  1. Pythonで文字列の相異なる部分列の数を数えるプログラム

    文字列 s が与えられたとき、その文字列から作ることができる相異なる部分列(サブシーケンス)の総数を求める問題です。答えが非常に大きくなる可能性があるため、結果は 109 + 7 で割った余りとして返します。 たとえば、入力が s = "bab" の場合、出力は 6 になります。これは "a"、"b"、"ba"、"ab"、"bb"、"bab" の 6 つの異なる部分列が存在するためです。 解法のアプローチ この問題は動的計画法(DP)を用いて効率的に解くこ

  2. Pythonで「良いトリプレット」の数を数えるプログラムの書き方

    問題概要配列 nums と、3つの異なる整数 a、b、c が与えられます。このとき、条件を満たす「良いトリプレット(good triplet)」の個数を求めるのが目的です。トリプレット (nums[i], nums[j], nums[k]) が良いトリプレットとみなされるのは、以下の条件をすべて満たす場合です。0 <= i < j < k < nums の要素数|nums[i] − nums[j]| <= a|nums[j] − nums[k]| <= b|nums[i] − nums[k]| <= cたとえば、nums = [5,2,3,3,12,9