C数组问题,送分!!!
lxas 2001-04-24 04:41:00 编写一个程序,运行掷骰子游戏1000次,并回答:
a)第一次掷骰子,第二次掷骰子,……第二十次掷骰子、以及第二十次之后赢的游戏各有多少次。
b)第一次掷骰子,第二次掷骰子,……第二十次掷骰子、以及第二十次之后赢的游戏各有多少次。
c)一次游戏的平均投掷次数是多少?
游戏规则:
游戏者投掷两颗骰子,第一次投掷后如果两颗的和为7或11,那么游戏者就赢了,如果和为2、3或12游戏者就输了、如果为4、5、6、8、9、10,那么这就为游戏者的点数。要想赢的话,必须继续投掷骰子,直到取得自己的点数为止,但是,如果掷出7,那么游戏者就输了。
我写了下面的程序,可是老是觉得不是很好,请各位帮我看一下,有没有更简单的方法?
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define SIZE 21
int rollDice (void);
main()
{
int win[SIZE]={0}, loose[SIZE]={0}, i, gameStatus, myPoint,
total, count, a, sum;
srand(time(NULL));
for(count=1; count<=1000; count++)
{
total=rollDice();//第一次投掷
switch(total)
{
case 7: case 11://第一次就赢了
gameStatus=1;
win[0]++;
break;
case 2: case 3: case 12://第一次就输了
gameStatus=2;
loose[0]++;
break;
default://记下点数
gameStatus=0;
myPoint=total;
//printf("%d", myPoint);
break;
}
i=0;
while(gameStatus==0)//计算投掷次数
{
i++;
total=rollDice();
if (total==myPoint)
{
gameStatus=1;
win[i]++;
if(i>20)
win[20]++;
}
else if (total==7)
{
gameStatus=2;
loose[i]++;
if(i>20)
loose[20]++;
}
}
if (gameStatus==1)
printf("w(%d)\t", i+1);
else
printf("l(%d)\t", i+1);
}
for(a=0; a<=SIZE-1; a++)
{
if(a>=20)
{
printf("win over 20:%4d--", win[a]);
printf("loose over 20:%4d--", loose[a]);
}
else
{
printf("win[%d]:%4d--", a+1, win[a]);
printf("loose[%d]:%4d--", a+1, loose[a]);
}
}
for(i=0; i<=SIZE-1; i++)//计算总共投掷次数
{
sum+=(win[i]+loose[i]);
}
printf("\nThe average is:%f", (float)sum/1000);
return 0;
}
int rollDice (void)
{
int die1, die2, workSum;
die1=1+(rand()%6);
die2=1+(rand()%6);
workSum=die1+die2;
return workSum;
}
另外还有两个问:
1,赢的机会是否会随着投掷次数的增加而上升?
2,赢得游戏的运气怎样?