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) で高速に計算できます。図形数は他にも三角数・四角数・五角数など多くの種類があり、それぞれ類似の多項式で表されるのも興味深いポイントです。
-
Pythonで文字列の相異なる部分列の数を数えるプログラム
文字列 s が与えられたとき、その文字列から作ることができる相異なる部分列(サブシーケンス)の総数を求める問題です。答えが非常に大きくなる可能性があるため、結果は 109 + 7 で割った余りとして返します。 たとえば、入力が s = "bab" の場合、出力は 6 になります。これは "a"、"b"、"ba"、"ab"、"bb"、"bab" の 6 つの異なる部分列が存在するためです。 解法のアプローチ この問題は動的計画法(DP)を用いて効率的に解くこ
-
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