第10講 魔方陣自動生成アプリ
第2話 生成を途中でやめさせる

それでは、9次順列などを2次元に並べるアプリ
n=4
01 02 03 04
05 06 07 08
09 10 11 12
13 14 15 16

01 02 03 04
05 06 07 08
09 10 11 12
13 14 16 15

01 02 03 04
05 06 07 08
09 10 11 12
13 15 14 16

01 02 03 04
05 06 07 08
09 10 11 12
13 15 16 14

01 02 03 04
05 06 07 08
09 10 11 12
13 16 14 15

01 02 03 04
05 06 07 08
09 10 11 12
13 16 15 14

01 02 03 04
05 06 07 08
09 10 11 12
14 13 15 16

01 02 03 04
05 06 07 08
09 10 11 12
14 13 16 15

01 02 03 04
05 06 07 08
09 10 11 12
14 15 13 16

01 02 03 04
05 06 07 08
09 10 11 12
14 15 16 13

生成された2次元4次順列総数=10

n=3
1 2 3
4 5 6
7 8 9

1 2 3
4 5 6
7 9 8

1 2 3
4 5 6
8 7 9

1 2 3
4 5 6
8 9 7

1 2 3
4 5 6
9 7 8

1 2 3
4 5 6
9 8 7

1 2 3
4 5 7
6 8 9

1 2 3
4 5 7
6 9 8

1 2 3
4 5 7
8 6 9

1 2 3
4 5 7
8 9 6

生成された2次元3次順列総数=10


作っていきたいと思います。
2次元4次順列としていますが、
4次順列を2次元に並べたものをこう表すことにします。


ただし、総数が多いですからカウンタcnが10になったら、
強制的に止めるようにすることにしましょう。
第9講第11話のプログラムを10個出来た段階でやめさせるには、
void f(int g){
  int i,j,h;
  for(i=0;i<n;i++){
    x[g]=i+1;
    h=1;
    if(g>0){
      for(j=0;j<g;j++){
        if(x[g]==x[j]){
          h=0;
          break;
        }
      }
    }
    if(h==1){
      if(g+1<n){
        f(g+1);
        
if(cn==10)return;
      }
      else{
        cn++;
        hy();
        
if(cn==10)return;
      }
    }
  }
}
ピンクの部分を加えます。
では、皆さん第9講第11話のプログラム添付ファイル
を改良して、2次元に並べるアプリを実現しましょう。
ただし、
  for(i=0;i<n;i++){

      if(g+1<n){
の2文は当然変更が必要ですし、
void hy(){
  int i;
  for(i=0;i<n;i++){
    printf("%d ",x[i]);
  }
  printf("\n");
}
も2次元ループに変えなければなりませんよ。




第1話へ 第3話へ

a


初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門

数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座

初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ