第8講 for文・if文・配列・ポインタを総動員して3次魔方陣の自動生成に挑戦する!
第2話 3次順列作成プログラム

3次順列
x

解答例
#include<iostream>
using namespace std;
void f(int *x);
void g(int *x);
void main(){
   int x[3];
   f(x);
}
void f(int *x){
   int i,j,k;
   for(i=1;i<4;i++){
     x[0]=i;
     for(j=1;j<4;j++){
        x[1]=j;
        if(x[0]!=x[1]){
          for(k=1;k<4;k++){
             x[2]=k;
             if(x[2]!=x[0] && x[2]!=x[1]){
               g(x);
             }
          }
        }
     }
   }
}

void g(int *x){
   for(int i=0;i<3;i++)cout<<x[i]<<" ";
   cout<<endl;
}
参考ファイル

次ぎに4次に進みますが、
その前に順列の総数をカウントして、
b
表示できるように変更しておきましょう。
4次以降のすべての順列を作り出すプログラムが正しいか、
正しくないかの判定に総数があると便利だからです。
4次であれば、その総数は4!=4×3×2×1=24
5次であれば、その総数は5!=5×4×3×2×1=120
6次であれば、その総数は6!=6×5×4×3×2×1=720
                ・
                ・
                ・
n次であれば、その総数はn!=n×(n-1)×(n-2)×・・・×3×2×1
ですね。
24,120,720などの総数が正しければ、
すべての順列を作り出すプログラミングは正しい可能性が高いといえます。
もちろん、グローバル変数を用意して
#include<iostream>
using namespace std;
int cn;
void f(int *x);
void g(int *x);
void main(){
   cn=0;
   int x[3];
   f(x);
  
cout<<endl<<"3次順列総数は"<<y<<endl;
}
void f(int *x){
   int i,j,k;
   for(i=1;i<4;i++){
     x[0]=i;
     for(j=1;j<4;j++){
        x[1]=j;
        if(x[0]!=x[1]){
          for(k=1;k<4;k++){
             x[2]=k;
             if(x[2]!=x[0] && x[2]!=x[1]){
               g(x);
             }
          }
        }
     }
   }
}

void g(int *x){
   for(int i=0;i<3;i++)cout<<x[i]<<" ";
   cout<<endl;
  
cn++;
}
でも良いわけですが、
なるべくグローバル変数は用いないの原則に従って、
プログラミングをしてみてください。
結構難しいですよ。

第1話へ 第3話へ

a

魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
VC++ C言語 C++ 入門 初心者 基礎から応用まで
本サイトトップへ