• ベストアンサー

数字4ケタのパターンをつくりたいのですが・・

1~9までの数字の中から4つを選んで、4ケタの数をつくります。 <例> 1245、5894、4651、2179、、 かぶらないように100パターン作らなければなりません。 何パターンの4ケタの数がつくれますでしょうか?? 簡単に出せる方法を教えてほしいです。 また、自動的にパターンを出してくれるようなフリーのプログラムやシステムなどを知っている方がいらっしゃいましたら、教えてください。 よろしくお願いします。

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

  • ベストアンサー
  • age_momo
  • ベストアンサー率52% (327/622)
回答No.5

>自動的にパターンを出してくれるようなフリーのプログラム 作り方 Excelを起動→ツール→マクロ→visiual basic editor Visual Basic で 挿入→標準モジュール 出てきた画面に下のプログラムをコピー、ペースト 使い方 Excelでツール→マクロ→マクロ 『test』を選択して実行 3024通り全て並びます。100個だけでいいなら3022を99に変更してください。 Sub test() Dim Numset(3023) As Integer, ct As Integer Dim ct1 As Integer, temp As Integer, rndNo As Integer Randomize For ct = 1234 To 9876 If handan(ct) Then Numset(ct1) = ct: ct1 = ct1 + 1 Next For ct = 0 To 3022 'ここの3022を99に変更 rndNo = Int(Rnd() * (3024 - ct)) temp = Numset(rndNo) Cells(ct + 1, 1) = temp Numset(rndNo) = Numset(3023 - ct) Numset(3023 - ct) = temp Next Cells(3024, 1) = Numset(0) End Sub Private Function handan(num As Integer) As Boolean Dim ct As Integer, data(3) As Integer, kake As Long For ct = 0 To 3 data(ct) = Int((num Mod 10 ^ (4 - ct)) / 10 ^ (3 - ct)) Next kake = (data(0) - data(1)) * (data(0) - data(2)) kake = kake * (data(0) - data(3)) * (data(1) - data(2)) kake = kake * (data(1) - data(3)) * (data(2) - data(3)) kake = kake * data(0) * data(1) * data(2) * data(3) If kake Then handan = True: Exit Function handan = False End Function

moko_1984
質問者

お礼

どうもありがとうございます。 やってみたところ、できました!! すごいですね、感動いたしました。 ちなみに、同じ要領で5ケタと10ケタ(この場合は1~10の数を使います)を作りたい場合は、 プログラムのどこを変更すれば良いでしょうか? いじってみましたが、私には到底無理でした・・。 もしご迷惑でなければ、こちらも教えて頂けないでしょうか。

その他の回答 (4)

回答No.4

ちなみに 9P4=9*8*7*6=3024(9個から4個選んで並べる) で3024パターンできますね

moko_1984
質問者

お礼

3024もできるんですね。果てしない。。 数式、さっぱり解りません・・(笑) どうもありがとうございました!

  • sanori
  • ベストアンサー率48% (5664/11798)
回答No.3

エクセルなどの表計算を使いましょう。 まず、 表全体の表示形式を、セルの書式設定で「0000」(4桁の数字)に設定します。 次に、0000から9999の数を発生させます。 具体的には、セルA1に0000、A2に0001、A3に0002 と入力した後、セルA1~A3をマウスドラッグで選択し、いったんマウスから指を離し、セルA3の右下のところを正確にクリックし、マウスボタンを押したまま、セルA10000まで引っ張ります。 すると、セルA1~A10000に、0000~9999の数が発生しました。 次に、乱数を発生させます。 具体的には、セルB1に、 =RAND() と入力した後、セルB1をセルB2からB10000までコピーします。 以上で準備は整いました。 セルA1からセルB10000までをマウスドラッグで選択した後、 「データ」→「並び替え」(=ソート)で、B列の昇順または降順で並び替えをします。 以上で作業は終わりです。 セルA1~A100の4桁の数字を使ってください。

moko_1984
質問者

お礼

「エクセルでできないかなぁ・・」と思ってはいたのですが、 こういった方法があるのですね。乱数を発生させる。と。 勉強になりました、どうもありがとうございました。

回答No.2

エクセルで、 セルA1に"1"を入力します。 セルB1に"2"を入力します。 セルC1に"3"を入力します。 セルD1に"4"を入力します。 セルA2に"=IF(B2=1,MOD(A1,9)+1,A1)"を入力します。 セルA2をB2とC2にコピーします。 セルD1に"=MOD(D1,9)+1"を入力します。 セルE1に"=IF(OR(A1=B1,A1=C1,A1=D1,B1=C1,B1=D1,C1=D1),"",A1*1000+B1*100+C1*10+D1)"を入力します。 セルE1をE2にコピーします。 セルA2~E2を下へ向かってたくさんコピーします。 E列に答えが出ます。

moko_1984
質問者

お礼

エクセル、奥が深いですね. 簡単なものしか作ったことがなかったので、勉強になります。 どうもありがとうございました!

  • ishiwaru
  • ベストアンサー率19% (70/356)
回答No.1

これなんかどう?

参考URL:
http://www.vector.co.jp/soft/win95/util/se123548.html
moko_1984
質問者

お礼

情報ありがとうございます! マックユーザーなのもので、サイトがうまく表示されないので、 後日Winからアクセスしてみます。