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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
死にそう

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

#1

投稿記事 by 死にそう » 2週間前

①サイコロを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万回記録することができるのかということと、②と③の書き方を教えていただきたいです。よろしくお願いします。

box
記事: 1787
登録日時: 10年前

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

#2

投稿記事 by box » 2週間前

コード:

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

コード:

        for (j = 0; i < 10000; j++)
i < 10000
でいいんですか?
j < 10000
じゃないんですか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
みけCAT
記事: 6432
登録日時: 10年前
住所: 千葉県
連絡を取る:

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

#3

投稿記事 by みけCAT » 2週間前

(2) (3) については、

-----------

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

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

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

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

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

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

-----------

という手順でできるはずです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

参照魚
記事: 68
登録日時: 3年前

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

#4

投稿記事 by 参照魚 » 2週間前

合計値を配列の添字にしてカウントすれば良いかと思います。

コード:

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

コード:

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

アバター
みけCAT
記事: 6432
登録日時: 10年前
住所: 千葉県
連絡を取る:

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

#5

投稿記事 by みけCAT » 2週間前

参照魚 さんが書きました:
2週間前
合計値を配列の添字にしてカウントすれば良いかと思います。

コード:

a[j] = sum;
↓
a[sum]++;
配列aの初期化も忘れずするようにしましょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

返信

“C言語何でも質問掲示板” へ戻る