ページ 11

9個の箱に1~9までの重複しない9個のボールを入れて全通りを試すプログラム

Posted: 2013年4月06日(土) 10:48
by sigs
A,B,・・・I までの9個の箱があり、1,2,・・・9までの9個のボールがあります。
箱A~箱Iまでの箱に1個ずつボールを入れる全通りのプログラムを作成したいです。

int balls[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int boxes[9] = {A, B, C, D, E, F, G, H, I};

for(p = 1; p <= 9; p++) {
for(q = 1; q <= 9; q++) {
・・・
for(x = 1; x <= 9; x++) {

Into_Box(balls[p]をboxes[1]に入れる, balls[q]をboxes[2]に入れる、 ・・・);

}
}
}
(配列は1から始まるとして考えています。)
これだと、全部の箱に1が入るパターンから全部の箱に9が入るパターン 9^9乗となってしまいます。
9!通りにするにはどうしたらいいのでしょうか?

Re: 9個の箱に1~9までの重複しない9個のボールを入れて全通りを試すプログラム

Posted: 2013年4月06日(土) 10:51
by sigs

コード:

int balls[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int boxes[9] = {A, B, C, D, E, F, G, H, I};

for(p = 1; p <= 9; p++) {
  for(q = 1; q <= 9; q++) {
    ・・・
      for(x = 1; x <= 9; x++) {

        Into_Box(balls[p]をboxes[1]に入れる, balls[q]をboxes[2]に入れる、 ・・・);

      }
  }
}
です。スペースが省略されてしまったので書き直します。

Re: 9個の箱に1~9までの重複しない9個のボールを入れて全通りを試すプログラム

Posted: 2013年4月06日(土) 11:29
by たいちう
一番簡単な方法はこうかな。

コード:

for (p = 1; p <= 9; p++) {
	for (q = 1; q <= 9; q++) {
		if (p == q) continue;
		for (r = 1; r <= 9; r++) {
			if (p == r || q == r) continue;
			...

Re: 9個の箱に1~9までの重複しない9個のボールを入れて全通りを試すプログラム

Posted: 2013年4月06日(土) 17:16
by sigs
たいちう さんが書きました:一番簡単な方法はこうかな。

コード:

for (p = 1; p <= 9; p++) {
	for (q = 1; q <= 9; q++) {
		if (p == q) continue;
		for (r = 1; r <= 9; r++) {
			if (p == r || q == r) continue;
			...
たいちうさんありがとうございます!
読んでみてなるほど!と思いました。