C++で指定された範囲内のすべての回文数を出力するプログラム
このチュートリアルでは、指定された範囲内に存在するすべての回文数を見つけて出力するC++プログラムについて解説します。
回文数とは、12321のように、前から読んでも後ろから読んでも同じになる数値のことです。このプログラムでは、検索対象となる数値の範囲(最小値と最大値)が与えられ、その範囲内に含まれるすべての回文数を検出して出力します。
プログラムの流れ
処理は大きく分けて2つのステップで構成されています。
1. 回文判定関数(is_palin)
引数として受け取った数値が回文かどうかを判定します。数値を1桁ずつ取り出しながら逆順に組み立て、元の数値と一致するかどうかを比較します。
2. 範囲走査関数(countPal)
最小値から最大値まで順番に数値を調べ、回文判定関数がtrueを返した数値だけを出力します。
サンプルコード
#include<iostream>
using namespace std;
// 数値が回文かどうかを判定する関数
int is_palin(int n){
int rev = 0;
for (int i = n; i > 0; i /= 10)
rev = rev*10 + i%10; // 桁を逆順に組み立てる
return (n == rev);
}
// 範囲内のすべての回文を出力する関数
void countPal(int min, int max){
for (int i = min; i <= max; i++)
if (is_palin(i))
cout << i << " ";
}
int main(){
countPal(99, 250); // 99〜250の範囲で回文を検索
return 0;
}実行結果
99 101 111 121 131 141 151 161 171 181 191 202 212 222 232 242
コードの解説
回文判定の仕組みはシンプルです。例えば121の場合、ループで各桁を取り出し「rev = rev * 10 + i % 10」によって逆順の数値121を作成します。最後に元の数値と比較し、一致すれば回文であると判断できます。
上記の実行例では99から250までの範囲を走査しているため、99、101、111といった3桁の回文数がすべて出力されます。範囲の値を変更すれば、任意の区間の回文数を簡単に求められます。
-
C++で始点から終点までのすべての経路を出力する方法|深さ優先探索(DFS)による実装
この記事では、有向グラフが与えられたときに、始点(ソース)から終点(デスティネーション)までのすべての経路を出力する問題を、C++で解く方法を解説します。有向グラフとは?有向グラフとは、各辺に向きが定められており、頂点Aから頂点Bへと一方向に進むことができるグラフのことです。逆向き(BからA)には、対応する逆向きの辺が存在しない限り移動できません。問題の例具体例を使って問題を理解しましょう。下図のようなグラフを考えます。始点を「K」、終点を「P」とした場合の出力は次のようになります。出力:K -> T -> Y -> A -> P K -> T -> Y -
-
C++で数値リストのすべての組み合わせを生成する方法(再帰アルゴリズム解説)
この記事では、与えられた数値リストから考えられるすべての組み合わせを生成するC++プログラムを紹介します。長さ1から配列の要素数まで、各長さごとの組み合わせを再帰的なアルゴリズムで効率よく列挙します。 アルゴリズムの概要 このプログラムは、各要素について「選ぶ/選ばない」という2つの選択肢を再帰的に評価することで、すべての組み合わせを網羅します。処理の流れは以下のとおりです。 Begin 要素数と各要素を入力として受け取る。 関数 Combi(char a[], int reqLen, int s, int currLen, bool check[], int l) :