代码来源:https://www.cnblogs.com/sunbuqiao/p/5371742.html
结对项目组员:李梓恒
int i, a, j;
int num[1000], sum = 0, l, m, G, num2[1000], num3[100], num4[100], t;
printf("请输入本轮参加游戏的人数\n");
scanf("%d", &a);//玩家人数
for (i = 0; i < a; i++)//输入各个玩家的数据
{
printf("请第%d成员输入数据",i+1);
scanf("%d", &num[i]);
if (num[i]<0)
{
exit(0);
}
else
{
if (num[i]>100)
{
exit(0);
}
}
}
接下来是进行的G值的求解,将所有的数据重新加起来之后,然后按照公式将G值求解出来。代码如下:
for (i = 0; i < a; i++)
{
l = num[i];
sum = sum + l;
}
G = (int)(sum / a*0.618);//G值
G值求完之后,根据离G值的范围给定相应玩家的成绩。首先先求距离,将每个玩家的数字减去G值后,再利用绝对值求出距离,然后放在两个数组里。一个是按原来顺序排的数组,另一个数组将其按照距离使用冒泡排序法进行大小排序,之后距离最小的从原先顺序的数组里找到对应项给定相应成绩;同理,找到最远距离的那个项给定相应的分数。代码如下:
for (i = 0; i < a; i++)
{
l = abs(num[i]-G);
num2[i] = l;
num3[i] = l;
}
for (i = 1; i < a; i++)//冒泡排序
{
for (j = 0; j < a - 1; j++)
{
if (num3[j] > num3[j + 1])
{
t = num3[j];
num3[j] = num3[j + 1];
num3[j + 1] = t;
}
}
}
for (i = 0; i < a; i++)//num4=0
{
num4[i] = 0;
}
for (i = 0; i < a; i++)
{
l = num3[0], m = num3[a - 1];
if (num2[i] == l)
{
num4[i] = a;
}
if (num2[i] == m)
{
num4[i] = -2;
}
}
for (i = 0; i < a; i++)//输出各个玩家的信息
{
printf("第%d个成员的成绩为%d\n",i+1, num4[i]);
}
将成绩给完之后需要将数据存入一个全局数组中,以供以后查询数据用。采用二维数组,第一维表示的是轮数。还有另外的一个全局数组,表示每轮的人数。代码如下:
for (i = 0; i < a; i++)
{
result[count][i] = num4[i];
}
num1[count][0] = a;
count++;
接下来是第二大部分,将以前玩的数据供玩家查询。利用全局数组中的数据还原出以前的成绩。即result[][]数组和num1[]数组。根据num1数组中的数值确定当时玩家的个数,然后利用这个作为控制条件将result里的数据调用出来。代码如下:
while (flag1 == 0)//查看各轮结果的比赛成绩
{
printf("请输入想查看的第几轮成绩");
scanf("%d", &n);
for (i = 0; i<num1[n - 1][0]; i++)
{
printf("第%d个成员的成绩为%d\n",i+1, result[n - 1][i]);
}
printf("是否还要继续观看,是请输入0,否按任意键退出\n");
scanf("%d", &flag1);
}
system("pause");
}