社区讨论

60分求助

P1068[NOIP 2009 普及组] 分数线划定参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lo12mrf0
此快照首次捕获于
2023/10/22 14:11
2 年前
此快照最后确认于
2023/11/02 13:40
2 年前
查看原帖
C
#include <stdio.h>
typedef struct player
{
	int num;
	int grades;
}player;
player players[5005];

void sort(player P[], int left, int right)
{
	int i, j;
	player tmp;
	i = left; j = right;
	tmp = P[left];
	if (i > j)
		return;
	while (i != j)
	{
		while (P[j].grades <= tmp.grades && j > i)
			j--;
		while (P[i].grades >= tmp.grades && j > i)
			i++;
		if (j > i)
		{
			player temp = players[i];
			players[i] = players[j];
			players[j] = temp;
		}
	}
	P[left] = P[i];
	P[i] = tmp;
	sort(P, left, i - 1);
	sort(P, i + 1, right);
}

int main()
{
	int arr[1000];
	int m, n, num, av;
	scanf("%d %d", &n, &m);
	m = m * 1.5;
	for (int i = 0; i < n; i++)
		scanf("%d %d", &players[i].num, &players[i].grades);
	sort(players, 0, n - 1);
	for (int i = 0; i < n; i++)
	{
		for (int j = i; j < n-i; j++)
		{
			if (players[i].grades == players[j].grades && players[i].num > players[j].num)
			{
				int a = players[i].num;
				players[i].num = players[j].num;
				players[j].num = a;
			}
		}
	}
	av = players[m - 1].grades;
	num = m;
	for (int i = m; i < n; i++)
	{
		if (players[i].grades == av)
			num++;
		else
			break;
	}
	printf("%d %d\n", av, num);
	for (int i = 0; i < num; i++)
	{
		printf("%d %d\n", players[i].num, players[i].grades);
	}
	return 0;
}  

第三个点在VS里逐语句出的答案是对的,运行就不对了

回复

0 条回复,欢迎继续交流。

正在加载回复...