ページ 11

サイコロのプログラミングについて

Posted: 2021年4月28日(水) 23:23
by 死にそう
①サイコロを10回振った合計を1万回記録する
②その1万回記録した中で、合計値が30であった回数を求める
③さらに、1万回記録した中で、一番多かった合計値とそれが何回あったかを求める

というプログラムを書きたいです

①はサイコロを10回振った合計を求めるプログラムは書けたのですが、1万回記録するプログラミングを書くとkilledというメッセージがでました。
一応そのプログラムを載せておきます。

コード:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main(void)
{
        int i, j, sum;
        int a[100];
        srand((unsigned int)time(NULL));
       
        for (j = 0; i < 10000; j++)
        {
        sum = 0;
        for (i = 0; i < 10; i++)
        {
            sum = sum + rand() % 6 + 1;
        }
           a[j] = sum;
        }
           for (j = 0; j < 10000; j++)
               printf("%d\n", a[j]);
 
      return 0;
}
どう書けば1万回記録することができるのかということと、②と③の書き方を教えていただきたいです。よろしくお願いします。

Re: サイコロのプログラミングについて

Posted: 2021年4月29日(木) 01:14
by box

コード:

        int a[100];
100個しかなくていいんですか?10000じゃないんですか?

コード:

        for (j = 0; i < 10000; j++)
i < 10000
でいいんですか?
j < 10000
じゃないんですか?

Re: サイコロのプログラミングについて

Posted: 2021年4月29日(木) 07:36
by みけCAT
(2) (3) については、

-----------

「合計」と「回数」の組の構造体を定義する

この構造体61個の配列を用意する
配列を、合計→その要素の添字、回数→0に初期化する

1万回の記録それぞれについて、配列のうち、記録した値を添字とする要素の回数を1増やす

(2)
この時点で、配列のうち添字が30である要素の「回数」が、合計値が30であった回数

配列を「回数」の降順でソートする

(3)
一番多かった合計値は、配列の最初の要素の「合計」および、それと「回数」が同じ要素の「合計」
それが何回あったかは、配列の最初の要素の「回数」

-----------

という手順でできるはずです。

Re: サイコロのプログラミングについて

Posted: 2021年4月29日(木) 17:08
by 参照魚
合計値を配列の添字にしてカウントすれば良いかと思います。

コード:

a[j] = sum;
↓
a[sum]++;

コード:

printf("合計 回数\n");
for (j = 0; j < 100; j++)
      printf("%d %d\n", j,a[j]);

Re: サイコロのプログラミングについて

Posted: 2021年4月29日(木) 17:14
by みけCAT
参照魚 さんが書きました:
4年前
合計値を配列の添字にしてカウントすれば良いかと思います。

コード:

a[j] = sum;
↓
a[sum]++;
配列aの初期化も忘れずするようにしましょう。