#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<math.h>
typedef struct stu
{
double grade;
char team;
}stu;
typedef struct Team
{
int num;
double Grade;
int Pnum;
}Team;
int main()
{
int n, k;
stu stu[1005] = { 0 };
Team T[26] = { 0 };
scanf("%d %d", &n, &k);
int i, j, h;
for (i = 0; i < n; i++)
scanf("%lf %c", &(stu[i].grade), &(stu[i].team));
for (i = 0; i < 26; i++)
{
T[stu[i].team - 'A'].Pnum++;
}
int ret = 0;
for (i = 0; i < 26; i++)
{
if (T[i].Pnum != 0)
{
T[i].num = ret;
ret++;
}
}
int arr[26][26] = { 0 };
for (i = 0; i < k; i++)
for (j = 0; j < k; j++)
scanf("%d", &arr[i][j]);
int arr2[26];
for (i = 0; i < 26; i++)
arr2[i] = k;
double average;
for (i = 0; i < k; i++)
{
average = 0;
for (j = 0; j < k; j++)
{
average = average + arr[j][i];
}
for (h = 0; h < 26; h++)
if (T[stu[h].team - 'A'].num == i)
{
average = average / arr2[stu[h].team - 'A'];
break;
}
for (j = 0; j < k; j++)
{
if (abs(arr[j][i] - average) > 16)
{
arr[j][i] = 0;
for (h = 0; h < 26; h++)
if (T[stu[h].team - 'A'].num == i)
{
arr2[stu[h].team - 'A']--;
break;
}
}
}
average = 0;
for (j = 0; j < k; j++)
{
average = average + arr[j][i];
}
for (j = 0; j < 26; j++)
{
if (T[stu[j].team - 'A'].num == i)
{
T[stu[j].team - 'A'].Grade = average / arr2[stu[j].team - 'A'];
break;
}
}
}
for (i = 0; i < n; i++)
{
stu[i].grade = round(stu[i].grade * 0.6 + T[stu[i].team - 'A'].Grade * 0.4);
}
for (i = 0; i < n; i++)
{
for (j = i + 1; j < n; j++)
{
if ((stu[i].grade) < (stu[j].grade))
{
int c = stu[j].grade;
stu[j].grade = stu[i].grade;
stu[i].grade = c;
char ch = stu[j].team;
stu[j].team = stu[i].team;
stu[i].team = ch;
}
}
}
for (i = 0; i < n; i++)
printf("%.lf %c\n", stu[i].grade, stu[i].team);
return 0;
}
- 我在VS上答案是对的,int也改成double了,还是通过不了