一.游戏内容
黄金点游戏是一个数字小游戏,其游戏规则是:
N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值。提交的数字最靠近G(取绝对值)的同学得到N分,离G最远的同学得到-2分,其他同学得0分。玩了几天以后,大家发现了一些很有意思的现象,比如黄金点在逐渐地往下移动。
二.程序实现功能
每次输入N个数字,计算出平均值和G点,输入数字最靠近G的同学得N分,离G最远的同学得到-2分,其他同学得0分。将每轮G点与每个同学对应的各自成绩打印出来。游戏结束后将每人成绩总和输出,可以看出第几名同学胜利。
三.程序模块
1.输入
输入分为两部分:玩家人数与局数、每位玩家的数据输入。用双重循环i、j分别控制玩家输入与游戏局数,并将玩家的输入数据按序存放在数组里。代码如下:
printf("游戏人数为:"); 与 for (i = 0; i<n; i++)
scanf("%f", &s[i]); scanf("%f", &s[i]);//输入数据
scanf("%d",&n);
printf("游戏轮数为:");
scanf("%d",&m);
2.计算G点
首先将所有玩家数据总数求出来,求出平均值,再将平均值乘0.618后得到G点。我们使用一个函数——count(float a[],int size)求所有玩家数据总数,将总数返回后在主函数求平均值与G点,并将G点打印出来。函数如下:
float count(float a[],int size)
{
int i;
float sum=0.0;
for (i = 0; i<size; i++)
{
sum = sum + a[i];
}
return sum;
}//求和函数
A = sum / n;
printf("黄金点G=%f\n",0.618*A);//计算G点
3.比较赋值
游戏要求玩家输入的数要与黄金点比较,所以我们将玩家输入的数依次与求得的黄金点相减,并将结果放入数组中,然后对数组中的数进行比较求最大最小值,在另一个数组里对求得的最大值所对应下标赋-2,最小值所对应下标赋N,其他值赋0。这样玩家每轮得分就会记录下来。代码如下:
min = b[0];
max = b[0];
for (i = 0; i<n; i++)
{
if (b[i]<min)
min = b[i];
}
for (i=0; i<n; i++)
{
if (b[i] == min)
c[i] = n;
else
c[i] = 0;
}
for (i = 0; i<n; i++)
{
if (b[i]>max)
max = b[i];
}
for (i = 0; i<n; i++)
{
if (b[i] == max)
c[i] = -2;
}
//将每人得分放入数组c中
for(i=0;i<n;i++)
{
mun[i]=mun[i]+c[i];
}
//将每个人的成绩累加
printf("********************\n*得分为: *\n");
for (i = 0; i<n; i++)
printf("* %2d *\n", c[i]);
printf("********************\n");
//输出每轮成绩
4.输出结果
printf("********************\n*得分为: *\n");
for (i = 0; i<n; i++)
printf("* %2d *\n", c[i]);
printf("********************\n");
//输出每轮成绩
}
printf("********************\n*总得分为: *\n");
for(i=0;i<n;i++)
printf("* %2d *\n",mun[i]);
printf("********************\n");
}
四.运行结果
原文:http://www.cnblogs.com/syh2013040101006/p/5370420.html