第9講 関数の再帰的使用
第9話 普遍的n次生成ソフト開発
実行画面
これはすべての順列を求めるソフトです。
何の順列を発生させるのかをnに入力してエンターして下さい。
n=4
1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
1 4 2 3
1 4 3 2
2 1 3 4
2 1 4 3
2 3 1 4
2 3 4 1
2 4 1 3
2 4 3 1
3 1 2 4
3 1 4 2
3 2 1 4
3 2 4 1
3 4 1 2
3 4 2 1
4 1 2 3
4 1 3 2
4 2 1 3
4 2 3 1
4 3 1 2
4 3 2 1
生成された順列は24個です。

を実現するソフトのコード例
#include<stdio.h>
void f(int g);
int x[2
5]; //将来5次魔方陣まで生成できるように25に変更
int
n,cn; //aをnに変更 変更理由はnuberの頭文字nは整数を表す場合が多いからです
int main() {
  printf("これはすべての順列を求めるソフトです。\n");
  printf("何の順列を発生させるのかをnに入力してエンターして下さい。\n");
  printf("n=");
  scanf("%d", &n);
  cn=0;
  f(0);
  printf("生成された順列は%d個です。\n",cn);
  return(0);
}
void f(int g){
  int i,j,h;
  for(i=0;i<n;i++){
    if(g==0)x[g]=i+1;
    h=1;
    if(g>0){
      for(j=0;j<g;j++){
        if(x[j]==i+1){
          h=0;
          break;
        }
      }
      if(h==1)x[g]=i+1;
    }
    if(h==1){
      if (g+1 < n){
        f(g+1);
      }
      else{
        for(j=0;j<n;j++)printf("%d ",x[j]);
        printf("\n");
        cn++;
      }
    }
  }
}

これはソフトやアプリの名に恥じないプログラムです。
キーボードからnの値を入力してやれば、
何次でも自動生成できるからです。
ただし、30次辺りになると膨大な時間がかかりますが。

ですが、皆さんの頭の中は爆発しそうになっていませんか。
いや、もうすでに爆発しているよ!
という人もいるでしょうね。
第10話で詳しく解説しましょう。

第8話へ   第10話へ

002

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

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