シャッフルアルゴリズム(交換法)

シャッフルアルゴリズムは、重複しない乱数を生成できるアルゴリズムの一つです。たとえば、10 個の乱数を生成し、そのすべてが「重複しない」必要があるとします。多くの人は、まず rand 関数で乱数を 1 つ取得して配列に格納し、配列にすでにある数字と比較する方法を思いつくと思います。この方法は簡単ですが、性能がとても悪くなります。ここで紹介するシャッフルアルゴリズムは、性能の面でその方法とは天と地ほどの差があります。シャッフルアルゴリズムの原理は実はとても単純で、まず配列に数字を入れ、その後に数字を打ち散らす(シャッフルする)というものです。 ...

2011年6月5日 · 1 分

【C++】数字の反転・文字列の反転(応用:型変換、文字列処理、ループ)

これはかなり簡単な問題で、数字や文字列を反転させるだけです。たとえば「linroex」と入力すると「xeornil」が、123 と入力すると 321 が出力されます。解き方は難しくありません。C++ では文字列を配列のようにアクセスできる特徴を利用して、入力文字列の長さをループの終了値に設定します。ループを 1 回まわすたびに、文字列 X の最後の文字を文字列 Y の先頭に移します。ループが終わったとき、反転が完了しています。 ...

2011年3月6日 · 1 分

【VB】【C++】n!(階乗)の計算

n の階乗を計算するのは、とても簡単なことです。このプログラムを書いたのは、順列・組み合わせのためでした。答えがおよそどれくらいの数になるのかを知りたかったので、階乗の値を求める n! の関数を書きました。階乗とは 123…..n のことです。順列では、並べるものが5つあれば、結果は最大でも 5432*1 の値、つまり最大120通りの答えになります。 以下では n! を Function として作成しました。VB 版と C++ 版があります。ループを学び始めたばかりの人は、この関数でループの使い方を練習できます。また、integer では値が収まらないかもしれないと心配したため、戻り値は string で返すようにしました。この Function を使うときは、戻り値を先に数値型に変換する必要があります。 ...

2011年1月5日 · 1 分