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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
sigs

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

#1

投稿記事 by sigs » 13年前

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!通りにするにはどうしたらいいのでしょうか?

sigs

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

#2

投稿記事 by sigs » 13年前

コード:

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]に入れる、 ・・・);

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

たいちう
記事: 418
登録日時: 15年前

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

#3

投稿記事 by たいちう » 13年前

一番簡単な方法はこうかな。

コード:

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;
			...

sigs

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

#4

投稿記事 by sigs » 13年前

たいちう さんが書きました:一番簡単な方法はこうかな。

コード:

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;
			...
たいちうさんありがとうございます!
読んでみてなるほど!と思いました。

閉鎖

“C言語何でも質問掲示板” へ戻る