以下のプログラムを使って重複しない4ケタの乱数を発生させ、数当てゲームを作りたいです。
以下のプログラムで乱数を4つ作ることができたのですが、重複してしまいます。
どのようにすればよいのですか?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main()
{
int i,d;
float f;
unsigned long time1;
unsigned seed;
time(&time1);
seed=time1;
srand(seed);
for (i=0;i<4;i++)
{
f=rand();
d=f*10/32768.0;
printf ("%d ",d);
}
}
No.2ベストアンサー
- 回答日時:
やりたいことは、”1ケタの数字(0~9)を4つ重複しないように乱数生成する”ですかね?
(4ケタの数字1000~9999ではないですよね?プログラムの内容的に。)
実現方法はいくつかあると思います。
案1.配列に生成した乱数を記録しておいて、
2回目以降の乱数で抽選された数字が、
配列に記録してある数字と一致するかチェックし、
一致した場合は、一致しなくなるまで再度乱数生成をし直す。
以下のプログラムは一例。(手元がC++の環境なので微妙に違うけど。)
これが良い例というわけではないです。何かバグあるかもしれん。
int i, d;
srand((unsigned)time(NULL));
int ary[4];//生成した乱数格納用
//配列初期化、乱数で選ばれる事が無い-1を入れておく。
for (i = 0; i < 4; i++){
ary[i] = -1;
}
for (i = 0; i<4; i++)
{
while (ary[i] < 0){
d = rand() % 10;
if ((d != ary[0]) && (d != ary[1]) && (d != ary[2])){ //要素数が少ないので横着
ary[i] = d;
}
}
printf("%d ", d);
}
案2.配列(要素数10)に0~9の数字を入れておいて、
ランダムに配列内の並び順をシャッフルして、
その後、先頭の4つを出力する。
参考:http://mementoo.info/archives/746
案2の方がスマートな気がしますが、せっかく途中までプログラム作ってたようなので、
案1はそれの改造版ですな。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# C言語 3 2022/11/09 13:27
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
c言語の質問です。 ランダムに4桁の暗証番号を出力するプログラムを作ったのですが、4947→4973
C言語・C++・C#
-
毎回違う乱数を生成するにはどうしたらいいでしょうか
その他(コンピューター・テクノロジー)
-
hit&bolwのプログラミングができません
C言語・C++・C#
-
-
4
関数から配列を返すには?
C言語・C++・C#
-
5
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
6
数字の位ごとの値を表示するプログラム
C言語・C++・C#
-
7
C言語初心者の質問失礼します。
C言語・C++・C#
-
8
1から9までの9個の数字から異なる4個選んで作る4桁の整数 は何通りありますか? 考え方と答えをお願
中学校
-
9
C言語の入力した文字を反転させるプログラミングの仕方が分かりません。
Ruby
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
IF関数でEmpty値を設定する方法。
-
C#の質問
-
パソコンキーボードで時分秒を...
-
変数を動的に作るには?
-
動的配列が存在(要素が有る)か...
-
VBAで配列の計算
-
C言語 配列からランダムに素数...
-
VBでbyte配列型のインスタンス...
-
For文と配列
-
VBA 配列数式的に一括してR...
-
配列の要素数を超えた参照のコ...
-
VBで作った乱数を一度も重複さ...
-
等間隔にベクトルを作成。(MAL...
-
遅延バインディングを使用でき...
-
ラジオボタンのチェックをEnter...
-
C#での画像送信プログラム(ネ...
-
VB.net 引数で配列変数を渡す際...
-
int型配列の一括初期化
-
【MFC】GetCount()とGetSize()...
-
C# Splitと配列の複合方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
IF関数でEmpty値を設定する方法。
-
パソコンキーボードで時分秒を...
-
VBAで配列の計算
-
EXCEL VBA で、0から?1から?
-
変数を動的に作るには?
-
VB.net 引数で配列変数を渡す際...
-
動的配列が存在(要素が有る)か...
-
VBで作った乱数を一度も重複さ...
-
配列の要素数を超えた参照のコ...
-
複数のテキストボックスに同じ...
-
C言語 重複しない4ケタの乱数...
-
javaプログラムについて
-
C#の質問
-
Visual C++ でコントロールを...
-
遅延バインディングを使用でき...
-
Excel VBAで配列の途中から(X)M...
-
排列と配列の漢字の使い分けは
-
For文と配列
-
VBでbyte配列型のインスタンス...
-
C言語で3次元配列の課題をして...
おすすめ情報