1

2 つのサイコロの転がりをシミュレートするプログラムを作成します。次に、2 つの値の合計を計算し、1 つの添字付きの配列に配置する必要があります。配列を印刷します。また、12 が何回現れるかを求めよ。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 13
int main()
{
    int face;   
    int arraysize=13;       
    int counter[13];
    int frequency[ SIZE ]= {13};
    for(int i=0; i<13; i++)
        counter[i] = 0;

    int die1; 
    int die2;



    srand( time( NULL ) );


    for ( int roll1 = 0; roll1 <=36000; roll1++ ) {
        die1 =  1 + rand() % 6;
        die2 =  1 + rand() % 6;
        counter[die1+die2]++;
        ++frequency[ face ];
    }

    printf("%4s%17s\n","Sum of Values","Frequency");

    for(int face=2; face<arraysize;face++)
    {
            printf("%8d%17d\n",face,frequency[ face ]);
     }       

    system("PAUSE");
    return 0;
}
プリントスクリーン
値の合計頻度
       2 36001
       3 0
       4 0
       5 0
       6 0
       7 0
       8 0
       9 0
      10 0
      11 0
      12 0

どうしたの ???

4

4 に答える 4

5

この行

 ++frequency[ face ];

ループは値を変更しないため、常に同じ場所をインクリメントします。次のfaceようなことを行う必要があります

++frequency[die1+die2];

frequencyまた、なぜ両方を持っているのかわかりませんcounterが、違いは何ですか?

編集:指摘されているようにface、まったく初期化されていません(削除したコードがない限り)。

于 2012-05-02T19:42:39.963 に答える
2
++frequency[ face ];

face初期化されていません。

于 2012-05-02T19:43:23.110 に答える
0

初期化していないようですface

その後、繰り返しアクセスしますfrequency[ face ]

于 2012-05-02T19:44:20.533 に答える
0

faceは初期化されていません。常に同じ場所に周波数を追加するため、2 つのサイコロの合計の 1 つだけのカウントが得られます。

于 2012-05-02T19:45:13.837 に答える