C++で数値が「1」「14」「144」の連結のみで構成されているか判定する方法
本記事では、与えられた数値や文字列が「1」「14」「144」のみを連結した形になっているかどうかを判定する問題を解説します。例えば、文字列「111411441」はこれらの数字の組み合わせで表現できるため有効ですが、「144414」はどの組み合わせでも表現できないため無効となります。
アルゴリズムの考え方
判定方法は非常にシンプルです。以下の手順で処理を行います。
まず、数値の末尾から1桁・2桁・3桁ずつ数字を取り出し、それが「1」「14」「144」のいずれかに一致するかを確認します。
一致するパターンが見つかったら、その桁数に対応する数(10・100・1000)で数値を割り、残りの部分に対して同じ処理を繰り返します。この操作を数値が完全になくなるまで続け、最後まで問題なく分解できれば、その数値は有効であると判断できます。
C++による実装例
#include <iostream>
#include <cmath>
using namespace std;
bool checkNumber(long long number) {
int n = number;
while (n > 0) {
if (n % 1000 == 144)
n /= 1000;
else if (n % 100 == 14)
n /= 100;
else if (n % 10 == 1)
n /= 10;
else {
return false;
}
}
return true;
}
int main() {
long long n = 111411441;
if(checkNumber(n)){
cout << "Valid number";
} else {
cout << "Invalid number";
}
}実行結果
Valid number
コードのポイント
この実装では、剰余演算(%)を使って末尾の桁を効率的に取り出しています。「144」→「14」→「1」の順に優先的にチェックすることで、より長いパターンから先にマッチさせ、誤った分解を防いでいる点が重要です。計算量は数値の桁数に比例するため、非常に効率的なアルゴリズムとなっています。
-
C++でNが五角数(ペンタゴナル数)かどうかを判定するプログラム
五角数とはある整数 N が与えられたとき、それが五角数(ペンタゴナル数)であるかどうかを判定するのが本記事の目的です。五角数とは、点を並べることで正五角形の形を描くことができる数のことです。これらの数は、五角形を構成する頂点や点として表現できます。五角数の例としては、次のような数列が挙げられます。1, 5, 12, 22, 35, 51, 70, 92 …五角数を判定する公式ある数が五角数かどうかは、以下の公式を利用して確認できます。p(n) = (3 × n² − n) / 2ここで、n は五角形を構成する点の個数を表します。この式から得られる値が順に 1, 5, 12, 22, 35… と
-
アームストロング数を判定するC++プログラムの書き方と解説
アームストロング数とはアームストロング数(Armstrong Number)とは、各桁の数字を「総桁数」乗した値の合計が、元の数そのものと等しくなる数のことです。例えば、153は3桁の数なので、各桁を3乗して足し合わせると元の数に戻ります。主なアームストロング数の例は以下の通りです。3 = 3^1 153 = 1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153 371 = 3^3 + 7^3 + 1^3 = 27 + 343 + 1 = 371 407 = 4^3 + 0^3 + 7^3 = 64 + 0 + 343 = 407この性質を利用すると、任意の整数がアームスト