以下のプログラムを使って重複しない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も見ています
-
【お題】NEW演歌
【大喜利】 若い人に向けたことは分かるけど、それはちょっと寄せ過ぎて変になってないか?と思った演歌の歌詞
-
一回も披露したことのない豆知識
あなたの「一回も披露したことのない豆知識」を教えてください。 「そうなんだね」と「確かに披露する場所ないね」で評価します。
-
とっておきの手土産を教えて
お呼ばれの時や、ちょっとした頂き物のお礼にと何かと必要なのに 自分のセレクトだとついマンネリ化してしまう手土産。 ¥5,000以内で手土産を用意するとしたらあなたは何を用意しますか??
-
おすすめのモーニング・朝食メニューを教えて!
コメダ珈琲店のモーニング ロイヤルホストのモーニング 牛丼チェーン店の朝食などなど、おいしいモーニング・朝食メニューがたくさんありますよね。
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
c言語の質問です。 ランダムに4桁の暗証番号を出力するプログラムを作ったのですが、4947→4973
C言語・C++・C#
-
hit&bolwのプログラミングができません
C言語・C++・C#
-
C言語にすごく悩んでいます。
C言語・C++・C#
-
-
4
入力関数(配列4個)を作成するプログラムです。
C言語・C++・C#
-
5
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
6
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
7
if と配列の組み合わせ
C言語・C++・C#
-
8
C言語 重複しない4ケタの乱数 教えてください
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パソコンキーボードで時分秒を...
-
動的配列が存在(要素が有る)か...
-
VB.net 引数で配列変数を渡す際...
-
C言語 重複しない4ケタの乱数...
-
VBAで配列の計算
-
EXCEL VBA で、0から?1から?
-
複数のテキストボックスに同じ...
-
PowerShell にて、配列の計算を...
-
javaプログラムについて
-
IF関数でEmpty値を設定する方法。
-
配列内の数字要素数をカウント...
-
配列の要素数を超えた参照のコ...
-
C言語で3次元配列の課題をして...
-
ラジオボタンのチェックをEnter...
-
配列にある重複要素を削除した...
-
遅延バインディングを使用でき...
-
VBScript 配列の宣言に変数を使用
-
変数を動的に作るには?
-
ループ処理の際、最後だけ","を...
-
大量のデータを読み込んで表示...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パソコンキーボードで時分秒を...
-
IF関数でEmpty値を設定する方法。
-
VBAで配列の計算
-
EXCEL VBA で、0から?1から?
-
VB.net 引数で配列変数を渡す際...
-
変数を動的に作るには?
-
動的配列が存在(要素が有る)か...
-
C言語 重複しない4ケタの乱数...
-
VBで作った乱数を一度も重複さ...
-
配列の要素数を超えた参照のコ...
-
Excel VBAで配列の途中から(X)M...
-
【MFC】GetCount()とGetSize()...
-
For文と配列
-
複数のテキストボックスに同じ...
-
VBでbyte配列型のインスタンス...
-
遅延バインディングを使用でき...
-
格闘ゲームのコマンド判定について
-
ラジオボタンのチェックをEnter...
-
Visual C++ でコントロールを...
-
マップチップの当たり判定の出し方
おすすめ情報