这个怎么答案错误啊?
查看原帖
这个怎么答案错误啊?
1134957
dongsad楼主2023/10/21 19:41
#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;//n:参赛人数  k:队伍数
	stu stu[1005] = { 0 };//最多1000人
	Team T[26] = { 0 };//最多26个队
	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++)
	{
		//arr[2][stu[i].team - 'A']++;
		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];//每组的评价,开始都赋值 k ,任一一个成绩超过平均分,则减1
	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++)
		{

			//for (h = 0; h < 26; h++) if (T[stu[h].team - 'A'].num == i) { average = (average / arr2[stu[h].team - 'A']); break; }
			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了,还是通过不了
2023/10/21 19:41
加载中...