ここから本文です

0から9までの整数を乱数により生成し、同じ数が3回連続して現れるまで続けるプログ...

hii********さん

2017/6/609:56:50

0から9までの整数を乱数により生成し、同じ数が3回連続して現れるまで続けるプログラムの作成せよ。

またその時までに発生した乱数の総数と各値の発生した回数も表示すること。


こういう課題が出たのですがやりかたがわかりません。誰方教えていただけませんか?

c言語でお願いします。

閲覧数:
123
回答数:
3

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

とみおさん

2017/6/623:48:33

こんな感じ
https://gist.github.com/anonymous/444abd70ec4edec72d57ab7a801329f0

rund()は0~RAND_MAXまでの乱数を生成します
それを10で割ったあまりを利用して0から9までの乱数を作っています
あとはコメントから意味は大体わかるかと

質問した人からのコメント

2017/6/12 20:26:12

日本語での説明も載っていて分かりやすかったのでベストアンサーとさせていただきます。
助けていただいた皆様ありがとうございました。

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

cha********さん

2017/6/611:34:52

たびたびすみません。無能コードを載せます。同じ数に揃わない奴です。どうやんだろうね。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
int i = 0;
int random1, random2=10, random3;
int gen0, gen1, gen2, gen3, gen4, gen5, gen6, gen7, gen8, gen9;
for(;;){
srand(time(0));
random1 = rand() % 10;
//printf("%d", random1);
i += 1;
if((random1==random2)&&(random2==random3)&&(random3==random1)) {
printf("%d 0:%d 1:%d 2:%d 3:%d 4:%d 5:%d 6:%d 7:%d 8:%d 9:%d",
i, gen0,gen1,gen2,gen3,gen4,gen5,gen6,gen7,gen8,gen9);
break;
}
srand(time(0)+1);
random2 = rand() % 10;
//printf("%d", random2);
i += 1;
if((random1==random2)&&(random2==random3)&&(random3==random1)) {
printf("%d 0:%d 1:%d 2:%d 3:%d 4:%d 5:%d 6:%d 7:%d 8:%d 9:%d",
i, gen0,gen1,gen2,gen3,gen4,gen5,gen6,gen7,gen8,gen9);
break;
}
srand(time(0)+2);
random3 = rand() % 10;
//printf("%d", random3);
i += 1;
if((random1==random2)&&(random2==random3)&&(random3==random1)) {
printf("%d 0:%d 1:%d 2:%d 3:%d 4:%d 5:%d 6:%d 7:%d 8:%d 9:%d",
i, gen0,gen1,gen2,gen3,gen4,gen5,gen6,gen7,gen8,gen9);
break;
}
switch(random1){
case 0: gen0 += 1; break;
case 1: gen1 += 1; break;
case 2: gen2 += 1; break;
case 3: gen3 += 1; break;
case 4: gen4 += 1; break;
case 5: gen5 += 1; break;
case 6: gen6 += 1; break;
case 7: gen7 += 1; break;
case 8: gen8 += 1; break;
case 9: gen9 += 1; break;
}
switch(random2){
case 0: gen0 += 1; break;
case 1: gen1 += 1; break;
case 2: gen2 += 1; break;
case 3: gen3 += 1; break;
case 4: gen4 += 1; break;
case 5: gen5 += 1; break;
case 6: gen6 += 1; break;
case 7: gen7 += 1; break;
case 8: gen8 += 1; break;
case 9: gen9 += 1; break;
}
switch(random3){
case 0: gen0 += 1; break;
case 1: gen1 += 1; break;
case 2: gen2 += 1; break;
case 3: gen3 += 1; break;
case 4: gen4 += 1; break;
case 5: gen5 += 1; break;
case 6: gen6 += 1; break;
case 7: gen7 += 1; break;
case 8: gen8 += 1; break;
case 9: gen9 += 1; break;
}
/*
if((random1==random2)&&(random2==random3)&&(random3==random1)) {
printf("%d 0:%d 1:%d 2:%d 3:%d 4:%d 5:%d 6:%d 7:%d 8:%d 9:%d",
i, gen0,gen1,gen2,gen3,gen4,gen5,gen6,gen7,gen8,gen9);
break;
}*/
}
return 0;
}

prwssさん

2017/6/610:55:33

>同じ数が3回連続して現れるまで続ける

以下のようにします


***


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

int main(void){
srand((unsigned)time(NULL));

int hist[10] = {0};
int prev2, prev1, curr;//previous, current
int i, count;


hist[prev2 = rand()%10]++;
hist[prev1 = rand()%10]++;
for(count=2; ;count++){
hist[curr = rand()%10]++;
if(prev2 == prev1 && prev1 == curr){
break;
}
prev2 = prev1;
prev1 = curr;
}


printf("count:%d\n", count);
for(i=0; i<10; i++){
printf("%d %d\n", i, hist[i]);
}


return 0;
}

あわせて知りたい

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる