C++でループ・再帰・gotoを使わずに文字をn回出力する方法
この記事では、C++においてループ(for文・while文)や再帰、goto文を一切使わずに、指定した文字をn回出力する方法を解説します。
一見すると繰り返し処理にはループが必須に思えますが、実は std::string クラスのコンストラクタを活用することで、非常にシンプルにこの問題を解決できます。
stringクラスのコンストラクタを利用する
std::string には、「文字」と「その繰り返し回数」を受け取るコンストラクタが用意されています。書式は以下のとおりです。
string(繰り返し回数, 出力したい文字);
例えば string(10, 'B') と書くと、「B」が10個並んだ文字列 "BBBBBBBBBB" が生成されます。この仕組みを使えば、明示的なループ処理を書かなくても目的の結果が得られます。
サンプルコード
#include <iostream>
using namespace std;
void print_char_n_times(char my_char, int count) {
cout << string(count, my_char) << endl;
}
int main() {
// 文字 'B' を10回出力する
print_char_n_times('B', 10);
// 文字 'x' を30回出力する
print_char_n_times('x', 30);
}実行結果
BBBBBBBBBB xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
コードのポイント
print_char_n_times()関数は、出力したい文字と回数を引数として受け取ります。- 関数内部では
string(count, my_char)によって、指定された文字がcount回繰り返された文字列を一度に生成しています。 - 生成した文字列をそのまま
coutで出力するだけで、for文やwhile文、再帰呼び出しは一切不要です。
このように、標準ライブラリが提供する機能を上手く活用することで、コードを簡潔かつ読みやすくできます。区切り線や罫線を表示したい場合など、同じ文字を繰り返し出力したい場面でぜひ活用してみてください。
-
C++で再帰を使わずに二分木のルートからリーフまでのパスを出力する方法
二分木が与えられたとき、ルートからリーフ(葉)までの複数のパスをすべて出力する必要があります。しかし、ここでの課題は再帰を使用せずに実装することです。通常、木の探索には再帰がよく使われますが、今回は制約として再帰が使えないため、反復処理(イテレーティブな方法)で木を走査します。そのために、STLのmapを活用します。このマップには各ノードとその親ノードの対応関係を格納し、レベル順走査(またはスタックを用いた走査)によってリーフノードを検出した時点で、親へのポインタをたどることでルートからリーフまでのパスを出力できます。上記の二分木の場合、ルートからリーフまで到達するためのパスは以下のように複数
-
【Python】ループを使わずに数列を出力する方法:再帰呼び出しを活用した実装
はじめに 本記事では、以下の問題に対する解決策について詳しく解説します。 問題の概要 2つの整数 N と K が与えられたとき、N が 0 より大きい間は N から K を引き続けます。そして N が 0 以下になったら、今度は元の値 N に戻るまで K を足していきます。 入力例 N = 10 K = 4 出力例 10 6 2 -2 2 6 10 アルゴリズムの考え方 N が 0 より大きい間、関数を再帰的に呼び出し続けます(各呼び出しごとに N から K を減算します)。 数値が 0 以下になったら、元の値に戻るまで各呼び出しごとに K を加算します。 加算と減算は同じ1つの関数