C++で数列a、b、b、c、c、cのN番目の項を求めるプログラム
この問題では、数Nが与えられます。私たちのタスクは、C++で数列a、b、b、c、c、c…のN番目の項を求めるプログラムを作成することです。
問題の説明
次の数列のN番目の項を求めます。
a、b、b、c、c、c、d、d、d、d、....(全N項)
そのためには、この数列の一般項を見つける必要があります。
具体例を使って問題を理解しましょう。
入力:
N = 7
出力:
d
解法アプローチ
数列の一般項を求めるには、まず数列を注意深く観察する必要があります。この数列は「a」が1個、「b」が2個、「c」が3個、「d」が4個…というように、同じ文字が増えていきながら繰り返される構成になっています。これは初項aと公差dがどちらも1である等差数列(AP)の累積和と見なすことができます。
等差数列の和の公式は次のとおりです。
和 = (n/2)(a + (n-1)d)
ここで、nは「N番目の項がどの文字に対応するか」を決める値になります。
それでは、nの値を導出してみましょう。
N番目の項 = (n/2)*(1 + (n-1)*1)
= (n/2)*(1 + n - 1)
= (n/2)*n
この式から、n ≈ √(2N) の関係が成り立つことがわかります。したがって、√(2N) を計算して整数値にすれば、N番目の項に対応する文字を「'a' + n」として求めることができます。
実装例
#include <iostream>
#include <math.h>
using namespace std;
char findNTerm(int N) {
int n = sqrt(2*N);
return ((char)('a' + n));
}
int main() {
int N = 54;
cout<<N<<"番目の数列の項は "<<findNTerm(N);
return 0;
}
出力
54番目の数列の項は k
この例では、N = 54 のとき n = √(2×54) ≈ 10 となるため、11番目のアルファベットである「k」が出力されます。実際、1+2+…+10 = 55 なので、46番目から55番目までの項はすべて「k」となり、計算結果と一致しています。
-
C++で数列 1, 2, 11, 12, 21… のN番目の項を求めるプログラム
この問題では、数値 N が与えられ、C++を用いて数列 1, 2, 11, 12, 21… のN番目の項を求めるプログラムを作成します。 問題の概要 次の数列のN番目の項を求めます。 1, 2, 11, 12, 21, 22, 111, 112, …(第N項まで) この数列には一定のパターンが隠されており、それをもとに一般項を導き出す必要があります。 具体例を見てみましょう。 入力 N = 8 出力 112 解法のアプローチ 一般項を導くためには、まず数列を注意深く観察することが重要です。この数列には次のような特徴があります。 すべての項が「1」と「2」のみで構成されている。 各項の末尾の
-
C++で数列3、5、33、35、53…のN番目の項を求めるプログラム
はじめにこのチュートリアルでは、数列「3、5、33、35、53…」のN番目の項を求めるC++プログラムについて解説します。この問題では、ある整数nが与えられます。私たちのタスクは、その数列におけるn番目の項を特定することです。数列の規則性まず、この数列がどのように構成されているのかを見てみましょう。1番目の項:32番目の項:53番目の項:33(1番目の項に「3」を付加)4番目の項:35(1番目の項に「5」を付加)5番目の項:53(2番目の項に「3」を付加)6番目の項:55(2番目の項に「5」を付加)つまり、奇数番目の項は「i/2 番目の項の末尾に3を付けた数」、偶数番目の項は「(i/2 − 1