C言語で乱数を用いてn人をmチームに分ける

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

C言語で乱数を用いてn人をmチームに分ける

#1

投稿記事 by YYY » 10年前

サイコロのプログラムをつかってやろうと思いましたがなんだか乱数をうまく利用できていない気がしました。
かぶりなく、公平に(ランダムに)チーム分け出来るプログラムを教えてください。

non
記事: 1097
登録日時: 13年前

Re: C言語で乱数を用いてn人をmチームに分ける

#2

投稿記事 by non » 10年前

YYY さんが書きました:乱数をうまく利用できていない気がしました。
うまくいかないプログラムを載せてください。そして、そう思った理由を述べてください。
あまりにも、状況が不明でお答えしようがありません。
non

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: C言語で乱数を用いてn人をmチームに分ける

#3

投稿記事 by みけCAT » 10年前

「n人をmチームに分ける」のルールをもう少し詳しく教えてください。
mチームの人数はできるだけ均等でないといけませんか?それとも各チーム1人以上いれば何人でもいいですか?
など
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

YYY

Re: C言語で乱数を用いてn人をmチームに分ける

#4

投稿記事 by YYY » 10年前

non>#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int saikoro(int n) {

return (int) (n * (rand()/32767.1)) + 1;

}

int main(void) {

int i;

srand((unsigned) time(NULL));

for (i = 1; i <= 100; i++)
printf("%4d", saikoro(6));

return 0;

}

サイコロのやつです。ここから、チーム分け、かぶりなしの数値を取り出す、という感じにしたいです。

YYY

Re: C言語で乱数を用いてn人をmチームに分ける

#5

投稿記事 by YYY » 10年前

みけCAT>例えば、10人を3チーム分けるとなりますと、4:3:3、3:3:4、3:4:3のようにしなきゃいけないようです。余る人がいない場合は均等にチーム分けをする。こんな感じのプログラムになります。

non
記事: 1097
登録日時: 13年前

Re: C言語で乱数を用いてn人をmチームに分ける

#6

投稿記事 by non » 10年前

サイコロでの乱数の発生としてはこれで問題はないと思います。
RAND_MAXが32767という前提で。

それで、あなたはサイコロを使ってどのようにチーム分けしたいのですか。
プログラムとして、考えられなくても、実際だったらどうするのか、示してください。
non

non
記事: 1097
登録日時: 13年前

Re: C言語で乱数を用いてn人をmチームに分ける

#7

投稿記事 by non » 10年前

YYY さんが書きました:4:3:3、3:3:4、3:4:3のようにしなきゃいけないようです。
ということは、人から与えられた課題ということですね。それであれば、課題を正確に書いてください。
実行例(何を入力して、どう出力するのか)も示してください。
non

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: C言語で乱数を用いてn人をmチームに分ける

#8

投稿記事 by みけCAT » 10年前

人を表す1~Nまでの整数をシャッフルして、最初から均等にチームの番号を割り振っていけばいいと思います。
もしくは均等に用意したチームの番号をシャッフルしてもいいです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

YYY

Re: C言語で乱数を用いてn人をmチームに分ける

#9

投稿記事 by YYY » 10年前

non>与えられた課題は、乱数を用いて公平なチーム分けを行うプログラムを作成してください。
ex:人数・・・42 チーム・・・5
1:2 6 12 22 25 30 38 39
2:4 7 16 17 21 23 24 27 33
3:5 9 13 29 32 35 40 41
4:8 10 14 20 28 31 34 36 42
5:1 3 11 15 18 19 26 37



このようなヒントはいただけました
私はサイコロの目を人数にするという感じでつくろうかと思いました。もっと簡単に作れると思いますがいい案がありませんでした。
上記で示したプログラムではサイコロ同様の動きをしますが、このままだと表示される数にかぶりが現れてしまうことになり、混乱していました。
プログラミングは初心者なのですみません。

YYY

Re: C言語で乱数を用いてn人をmチームに分ける

#10

投稿記事 by YYY » 10年前

みけCAT>ありがとうございます!シャッフルはどのような構造になりますか?

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: C言語で乱数を用いてn人をmチームに分ける

#11

投稿記事 by みけCAT » 10年前

擬似コードで示します。

コード:

シャッフル(配列)
 for i=配列のサイズ,配列のサイズ-1, ... , 1 // 1-origin
  pos= [1,i]の整数の乱数
  配列のi番目とpos番目を交換
 next i
シャッフルおわり
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

YYY

Re: C言語で乱数を用いてn人をmチームに分ける

#12

投稿記事 by YYY » 10年前

みけCAT>参考にさせていただきます!

閉鎖

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