• ベストアンサー

背番号(?)の付け方

数学の問題といえるかどうかわかりませんが、あることで悩んでいるので教えてください。 AからEまでの5つのグループがあります。それぞれのグループには100人のメンバーがいます。このとき、メンバー全員に次のような条件で背番号をつけたいのです。 ・表計算などでメンバー一覧を作ったとき、背番号からどのグループに属するかが判別できること。 ・あるグループに属するメンバーが、1,2人だけ他のグループに紛れ込んでも、番号だけで簡単に判別「できない」ようにすること。 1つ目の条件と2つ目の条件は矛盾するようですが、要は、番号だけではどのグループに属するかが簡単に判別できず、Excelなどで作った名簿上では簡単に抽出できるようにしたいということです。 具体的な例で説明すると、  Aに1001,1002,1003... Bに2001,2002,2003...と振ってしまうと、  Aの中にBが紛れ込んだとき、1001,1002,2003,1004...ではすぐに「仲間外れ」がわかってしまうので、それは困るということです。 そのような番号の振り方はあるでしょうか。 なお、背番号の桁数は何桁でもいいですが、常識的な範囲(せいぜい10桁までぐらい)としてください。

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

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

とりあえず、思いついたことをふたつほど。 ひとつは、背番号の各桁の数値を足した数字の1の位が0か5なら グループA、1か6ならグループB、って感じ。 1001 なら、各桁を足した数字が2で、グループC。4189 なら、 各桁を足した数字が 22 で、同じくグループC。 マクロを使えば抽出は簡単です。 もうひとつは、計算の要らない方法。 背番号の最初の桁に1~5の数字を振っておいて、下の桁から 数えて、その順番のところにある数字がグループを表す数字。 例えば、1001 は、最初の桁が1なので、下から数えて一桁目が 1なので、グループA。4189 なら、最初の桁が4なので、下から 数えて4桁目が4なので、グループD。 # 考えれば、考えるだけでてきそう :-)

mtkame
質問者

お礼

桁の数字を足すというアイデアは使えそうです。ありがとうございます。

その他の回答 (1)

  • funi2
  • ベストアンサー率53% (14/26)
回答No.2

自信なしというのは証明が得られてない, 実績がない, どういう風に構成すればよいのかわからない, 具体的でないということなのですが, こんなのはどうでしょう。 A. グループを割り当てる。 1. 全員の背番号からでしかわからない数字を作る。これをSとしましょう。あっ, この時点で, みんなの背番号は決まっていません。だから背番号は乱数とかで必要なだけ作っておいてください。後, Sはこのグループを管理する人だけの秘密にしてください。 2. Sと適当な背番号から新しい数字を作る。これをTとしましょう。 3. Tを5で割ったあまりを求める。出てきた数字をグループの番号としてこのグループに割り当てたい人にその背番号を割り当てる。 B. Aliceのグループを割り出す。 1. SとAliceの背番号からA.2.の方法で, Tを作る。 2. Tを5で割ったあまりを求める。出てきた数字はグループの番号。 C. Bobが混じってもグループがわからない。 "Sを秘密にして誰にも教えなければ", B.のグループの割り出し方が出来ないので, Bobがどのグループに属するのかわからない。 ということです。最初, Sに全員の背番号の総和。TはS引くAliceの背番号。って考えたんですけど, そしたらみんなの背番号を5で割ったあまりを取れば, Bobが仲間はずれってわかっちゃうんですよね。それで, こんな抽象的な書き方になってしまったわけです。TはSにAliceの背番号をかけたものにすればいいのかな。 あと, この方法だと, 全員そろわないと, 誰がどのグループなのかということがわからないという性質があります。 参考までにどうぞ。

mtkame
質問者

お礼

ありがとうございました。参考にさせていただきます。