0

私は学校での課題のためにこのプログラムを作成していますが、Yahtzee を取得するために必要な最大数のロールと、Yahtzee を取得するために必要な最小数のロールを取得する必要があります。次に、ロールの平均数を見つける必要があります。現時点では、ヤッツィーを取得するためのロールの最大数と最小数を決定する際にどこで間違ったのか、ちょっと混乱しています。誰でも私を助けてもらえますか?このプログラムは、天然のヤッツィーが 100 体得られるまで実行されます。

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

int main( void )
{  // MARKS THE BEGINNING OF THE main( ) BLOCK OF STATEMENTS

int die1 = 0 , die2 = 0 , die3 = 0 , die4 = 0, die5 = 0 , roll = 0 ;
int lownr = INT_MAX , highnr = 0 , yahtzee = 0 , averagenr;
int roll_total = 0 ;
srandom ( (unsigned) time (NULL) ) ; 

printf( "\nWelcome User, this program demonstrates the " ) ;
printf( "number of rolls it takes to obtain" ) ; 
printf( "\na natural Yahtzee.\n" ) ;

die1 = random ( ) % 6 + 1;
die2 = random ( ) % 6 + 1;
die3 = random ( ) % 6 + 1;
die4 = random ( ) % 6 + 1;
die5 = random ( ) % 6 + 1;

printf( "\nYou rolled: %d, %d, %d, %d, %d.\n\n" , die1 ,
         die2 , die3 , die4 , die5 ) ;

while (yahtzee < 100) {

++roll;
++roll_total;

die1 = random ( ) % 6 + 1;
die2 = random ( ) % 6 + 1;
die3 = random ( ) % 6 + 1;
die4 = random ( ) % 6 + 1;
die5 = random ( ) % 6 + 1;


if ((die1==die2) && (die2==die3) && (die3==die4) && (die4==die5)) {

yahtzee = yahtzee +1;

    /* If you have yahtzee, compare roll with previous values of highnr/lownr */
    if (roll>highnr)
        highnr = roll;
    if (roll<lownr)
        lownr = roll;

    /* Reset the roll counter, for next yahtzee */
    roll = 0;
    }

    }
    averagenr = roll_total / yahtzee ;


    printf("\n The total number of yahtzees you rolled is: %d.",yahtzee);
    printf("\n The total number of times you rolled is: %d.",roll_total);
    printf("\n The highest number of rolls to get a yahtzee is: %d",highnr);
    printf("\n The lowest number of rolls to get a yahtzee is: %d", lownr);
    printf("\n The average number of rolls to obtain a yahtzee is: %d", 
       averagenr);
    printf ( "\n\n Thank you for using this program. " ) ;
    printf ( "GoodBye.\n\n " ) ;

    return ( 0 ) ;

    }

サンプル出力

Welcome User, this program demonstrates the number of rolls it takes to obtain
a natural Yahtzee.

You rolled: 5, 5, 3, 2, 1.


The total number of yahtzees you rolled is: 100.
The total number of times you rolled is: 116704.
The highest number of rolls to get a yahtzee is: 5284
The lowest number of rolls to get a yahtzee is: 18
The average number of rolls to obtain a yahtzee is: 1167

Thank you for using this program. GoodBye.

解決した

4

1 に答える 1

2

私が理解しているように、重要なのは、ロールの数に 2 つのカウンターを使用する必要があるということです。1 つはロールの合計数で、後で平均を計算するために使用し、もう 1 つは次のヤッツィーに対する現在のロール数を追跡するために使用します。

int roll=0, roll_total=0;
int lownr=INT_MAX, highnr=0, averagenr;

while(yahtzee < 100) {

    ++roll; /* This will keep track of the number of rolls towards next yahtzee */
    ++roll_total; /* This is total number of rolls in entire program */

    if ((die1==die2) && (die2==die3) && (die3==die4) && (die4==die5)) {

        yahtzee = yahtzee +1;

        /* If you have yahtzee, compare roll with previous values of highnr/lownr */
        if (roll>highnr)
            highnr = roll;
        if (roll<lownr)
            lownr = roll;

        /* Reset the roll counter, for next yahtzee */
        roll = 0;
    }
}

averagenr = roll_total / yahtzee ;

編集

別のコメントであなたのコメントに返信しましたが、コメント内のコードが読めなくなってしまうので、もう少しお手伝いします。更新されたコードを注意深く見て、コードから次の行を削除します。

lownr = roll;
highnr = roll;
于 2013-10-07T20:02:23.327 に答える