マルチスレッド版数独自動生成ソフトC++コードを題材とする超初心者のためのVisual Studio C++講義
第9章 関数の再帰的使用

第2話 3次順列全生成



123 132 213 231 312 321
総数 = 6

を実現するコード例

#include<iostream>//インクルードファイルiostreamの読み込み

 

#include<conio.h>//while(!_kbhit());を使うためのお呪い

 

#include<string> //文字列変数を使えるようにするために組み込む

 

#include <iomanip> //setprecisionを使えるように組み込む

 

#include <cmath>//powなどを使うときに必要

 

#include <ctime>//time()(←現時刻発生する関数)を使うために必要

 

using namespace std;//coutを使うときに必要なお呪い

 

const int n = 3;//具体的な数字を使うのではなく、 n を使うと汎用性のあるプログラムになる!

 

void n次順列(int* a);// 1次元配列配列

 

int main() {

 

              int a[n]; // 1次元配列配列

 

              n次順列(a);

 

              while (!_kbhit());//待機させるための命令

 

              return 0;//int main() を終わるためのお呪い

 

}

 

void n次順列(int* a) {

 

              int 総数 = 0;

 

              for (int i = 0; i < n; i++) {

                           

                            a[0] = i + 1;

 

                            for (int j = 0; j < n; j++) {

 

                                          if (i != j) {

 

                                                        a[1] = j+ 1;

 

                                                        for (int k = 0; k < n; k++) {

 

                                                                      if (k != j && k != i) {

 

                                                                                    a[2] = k + 1;

                                                                                                                                                                                                                                                            cout << a[0] << a[1] << a[2] << " ";

 

                                                                                    総数++;

 

                                                                                    if (総数 > 0 && (総数 % 10) == 0)cout << endl;                                                

 

                                                                      }

 

                                                        }

 

                                          }

 

                            }

 

              }

 

              cout << endl << "総数 = " << 総数 << endl;

 

}



次話の課題は4次順列全生成です。


1234 1243 1324 1342 1423 1432 2134 2143 2314 2341
2413 2431 3124 3142 3214 3241 3412 3421 4123 4132
4213 4231 4312 4321
総数 = 24

条件は10個ごとに改行することです。







第9章第1話へ 第9章第3話へ

本講義トップへ