如果问题得到解决,请点我回答左上角的采纳和向上的箭头
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct node
{
int id;
char name[20];
int score[4];
node * next;
} * List;
int main()
{
List list = NULL;
node * p = NULL;
node * q = NULL;
int n;
scanf("%d", &n);
node input;
for (int i = 0; i < n; i++)
{
scanf("%d %s %d %d %d %d", &input.id, &input.name[0], &input.score[0], &input.score[1], &input.score[2], &input.score[3]);
if (!list)
{
list = p = (node *)malloc(sizeof(node));
p->id = input.id;
strcpy(p->name, input.name);
p->score[0] = input.score[0];
p->score[1] = input.score[1];
p->score[2] = input.score[2];
p->score[3] = input.score[3];
p->next = NULL;
}
else
{
p->next = (node *)malloc(sizeof(node));
p = p->next;
p->id = input.id;
strcpy(p->name, input.name);
p->score[0] = input.score[0];
p->score[1] = input.score[1];
p->score[2] = input.score[2];
p->score[3] = input.score[3];
p->next = NULL;
}
}
q = list;
while (q->next != NULL)
{
p = q;
node * min = p;
while (p)
{
if ((p->score[0] + p->score[1] + p->score[2] + p->score[3]) > (min->score[0] + min->score[1] + min->score[2] + min->score[3]))
min = p;
p = p->next;
}
if (min != q)
{
int tid = min->id;
char tname[20];
strcpy(tname, min->name);
int tscore[4];
memcpy(tscore, min->score, sizeof(int) * 4);
min->id = q->id;
strcpy(min->name, q->name);
memcpy(min->score, q->score, sizeof(int) * 4);
q->id = tid;
strcpy(q->name, tname);
memcpy(q->score, tscore, sizeof(int) * 4);
}
q = q->next;
}
p = list;
while (p)
{
int sum = 0;
int c3 = 1;
for (int i = 0; i < 4; i++)
{
if (p->score[i] < 55 && i != 3) c3 = 0;
sum += p->score[i];
}
if (c3 && sum >= 240)
printf("%d %s %d %d %d %d\n",p->id, p->name, p->score[0], p->score[1], p->score[2], p->score[3]);
p = p->next;
}
return 0;
}