• ベストアンサー

ループ構文について

N種類の変数がM種類の値を取る場合を考えて、(M^N通りの組み合わせがある) 全ての組み合わせを網羅的に探索するには、どうやってループ構文書けば良いですか? 申し訳ありませんが宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • venzou
  • ベストアンサー率71% (311/435)
回答No.4

再起呼び出しを使わない場合は、こんな感じで出来ると思います。 例: #include <stdio.h> #define N_MAX 10 #define M_MAX 100 int parameter[N_MAX]; //parameter[] を使った処理 void check(){ int n; for(n = 0; n < N_MAX; n++){ printf("%3d ",parameter[n]); } putchar('\n'); } void main(void) { int n; for(n = 0; n < N_MAX; n++) parameter[n] = 0; for(n = 0;;n = 0){ check(); while(++parameter[n] >= M_MAX){ parameter[n] = 0; n++; if(n >= N_MAX) return; } } }

w00d0st0k
質問者

お礼

こちらの方法を使わせていただきたいと思います。 ありがとうございました!

その他の回答 (3)

  • venzou
  • ベストアンサー率71% (311/435)
回答No.3

N重ループを作りたいって事ですよね。 再起呼び出しを使うとシンプルに書けると思います 例: #include <stdio.h> #define N_MAX 10 #define M_MAX 100 int parameter[N_MAX]; //parameter[] を使った処理 void check(){ int n; for(n = 0; n < N_MAX; n++){ printf("%3d ",parameter[n]); } putchar('\n'); } //再起呼び出してparameter[]を設定 void set_parameter(int n){ int m; if(n < N_MAX){ for(m = 0; m < M_MAX; m++){ parameter[n] = m; set_parameter(n+1); } }else{ check(); } } void main(void) { set_parameter(0); }

w00d0st0k
質問者

お礼

うまくいったみたいです!ありがとうございます!

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★考え方 ・『N種類の変数』と『M種類の値』を2次配列と同じ考えて検査すれば良いと思います。 ・つまり、『M種類の値』を横要素、『N種類の変数』を縦要素って感じかな。 ・下に簡単なサンプルを載せます。 ●サンプル int n, m; for ( n = 0 ; n < MAX_N_KIND ; n++ ){  for ( m = 0 ; m < MAX_M_KIND ; m++ ){   printf( "N変数(%d)のM値は ⇒ %d\n", n, N[n] );  } } ●解説 ・『MAX_N_KIND』定数が『N種類の変数』の種類数です。 ・『MAX_M_KIND』定数が『M種類の値』の値種類数です。 ・『n』、『m』は単なるカウンタです。 ・『N』配列は『N種類の変数』の配列と表現しています。 ・以上。おわり。

w00d0st0k
質問者

補足

すみませんちょっと説明が足らなかったかもしれないです。 やりたいとしていることは、N*M通りの探索ではなく、N^M通りの探索です。 あえて書けばこんな感じになります↓ int i; for ( i = 0 ; i < M ; i++ ){  for ( i = 0 ; i < M ; i++ ){   for ( i = 0 ; i < M ; i++ ){    for ( i = 0 ; i < M ; i++ ){     ・・・N回続く    }   }  } } 自分で自分を呼び出すみたいななことをしないとダメだと思うんですが…

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.1

普通に、ループ変数を入れ子にするだけじゃ駄目なのですか? まず、あなたの考えた(ちゃんとできなかった)コーディングを 示していただけますか?

関連するQ&A

専門家に質問してみよう