游戏规则: N个同学(N通常大于10),每人写一个0-100之间的有理数 (不包括0或100),
交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值。
提交的数字最靠近G(取绝对值)的同学得到N分,离G最远的同学得到-2分,其他同学得0分。
玩了几天以后,大家发现了一些很有意思的现象,比如黄金点在逐渐地往下移动。
经过不断的努力,由于能力不足,只能写出这样的代码,此代码还有一点瑕疵。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int point()
{
int i,j,k,M,N;
int max = 0, min = 0;
int m[100], n[100];
double average, G,sum = 0.0;
int score[100];
printf("欢迎来到黄金点游戏!
");
printf("请输入游戏轮数:
");
scanf_s("%d", &M);
printf("请输入游戏人数:
");
scanf_s("%d", &N);
memset(score,0,sizeof(int)*N);
for (i = 0; i < M; i++)
{
printf("
第%d轮游戏:
",i+1);
for (j = 0; j < N; j++)
{
printf("请输入一个0-100的数:
");
scanf_s("%d",&m[j]);
sum = sum + m[j];
average = sum/N;
G = average*0.618;
n[j] = m[j] - G;
n[j]=(n[j]>0) ? n[j] : n[j]*(-1);
max=(n[j]<n[max]) ? max:j;
min=(n[j]<n[min]) ? j:min;
}
//printf("
%d
",max);
//printf("%d
",min);
score[max]-=2;
score[min]+=2;
for(k=0;k<N;k++)
{
printf("第%d人本轮后总分数为%d: ",k+1,score[k]);
}
sum = 0;
printf("黄金点是%f", G);
max=0;
min=0;
}
return 0;
}
int main()
{
point();
system("pause");
}
游戏源码已上传GitHub: https://github.com/sacfwe/GoldGame
注:本博客为原创,转载请申明