중국 굿 OJ.
3408 단어 입문 알고리즘
이 문 제 는 어렵 지 않 지만 어떻게 제출 해 야 할 지 모 르 겠 습 니 다. 경계 테스트 데 이 터 는 몇 팀 이 생각 나 지 않 습 니 다. 어떤 상황 에서 생각 을 잊 어 버 렸 거나 문제 의 그 말 을 잘 보지 못 해서 화가 났 습 니 다. 먼저 여기에 쓰 고 이틀 후에 머리 가 깨 어 나 면 좀 어 지 럽 습 니 다. 만약 에 어떤 마음 좋 은 사람 이 불 에 타 는 것 을 발견 하면 알려 주 십시오.감사합니다!
#include<stdio.h>
#include<string.h>
struct student
{
int score;
int num;
char name[16];
char cname[16];
char sname[16];
}user[100],temp;
int main()
{
int n;
int x = 0;
while(scanf("%d",&n) != EOF)
{
int i;
for(i = 0; i < n; i++)
{
char xx;
scanf("%d%d%c",&user[i].score,&user[i].num,&xx);
gets(user[i].name);
int len = strlen(user[i].name);
int j,k = 0,m = 1;
user[i].sname[0] = user[i].name[0];
for(j = 0; j < len; j++)
{
if(user[i].name[j] != ' ')
{
// cname
user[i].cname[k] = user[i].name[j];
k++;
}
else
{
// sname
user[i].sname[m] = user[i].name[j + 1];
m++;
}
}
user[i].sname[m] = '\0';
user[i].cname[k] = '\0';
}
if(n == 0)
return 0;
if(x != 0)
printf("
");
x++;
for(i = 0; i < n; i++)
{
int j;
for(j = i; j < n; j++)
{
//
if(user[i].score < user[j].score)
{
temp = user[i];
user[i] = user[j];
user[j] = temp;
}
//
if(user[i].score == user[j].score)
{
//AC
if(user[i].num < user[j].num)
{
temp = user[i];
user[i] = user[j];
user[j] = temp;
}
//AC
if(user[i].num == user[j].num)
{
// ,
if(strcmp(user[i].sname,user[j].sname))
{
temp = user[i];
user[i] = user[j];
user[j] = temp;
}
//
if(!strcmp(user[i].sname,user[j].sname))
{
// cname
if(strcmp(user[i].cname,user[j].cname))
{
temp = user[i];
user[i] = user[j];
user[j] = temp;
}
}
}
}
}
}
for( i = 0; i < n; i++)
printf("%d %d %s
",user[i].score,user[i].num,user[i].name);
if(x == 1)
printf("
");
}
return 0;
}