| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
AC过的大牛帮我看看,我的老是WA。#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct Player
{
int number;
char name[21];
char role[2];
int year;
}Player;
//获取时间,比如1998-2006应该返回9
int GetYears(char* p)
{
const char* p1 = strtok(p, "-");
const char* p2 = strtok(NULL, "-");
return atoi(p2)-atoi(p1)+1;
}
//解析阵型 比如4-4-2解析为4,4,2
int ParseArrangement(char* p, int* d, int* m, int* s){
*d = atoi(strtok(p, "-"));
*m = atoi(strtok(NULL, "-"));
*s = atoi(strtok(NULL, "-"));
return 0;
}
//将队员按照编号由小到大排序
int cmp(const void* p1, const void* p2){
Player* pa = (Player*)p1;
Player* pb = (Player*)p2;
return (pa->number - pb->number);
}
//得到被选中的11名队员在数组中的索引
int* GetPlayers(Player* p, int d, int m, int s){
int *player = (int*)malloc(sizeof(int)*11);
int n = 0;
int i;
//找出守门员
for( i=0; i<22; i++){
if(p[i].role[0] == 'G'){
player[n++] = i;
if(n == 1)
break;
}
}
if(n<1)
goto Fail;
//找出'D'
for(i=0; i<22; i++){
if(p[i].role[0] == 'D'){
player[n++] = i;
if(n == d+1)
break;
}
}
if(n < d+1)
goto Fail;
//找出'M'
for(i=0; i<22; i++){
if(p[i].role[0] == 'M'){
player[n++] = i;
if(n == d+m+1)
break;
}
}
if(n < d+m+1)
goto Fail;
//找出'S'
for(i=0; i<22; i++){
if(p[i].role[0] == 'S'){
player[n++] = i;
if(n==11)
break;
}
}
if(n<11)
goto Fail;
return player;
Fail:
free(player);
return NULL;
}
int Arrangement(Player* p, int d, int m, int s){
int* pa = GetPlayers(p, d, m, s);
if(pa == NULL)
printf("IMPOSSIBLE TO ARRANGE \n");
else{
//先搜索出时间最长的队员,即为队长
int max = 0;
int pos=0;
for(int i=0; i<11; i++)
{
if(p[pa[i]].year >= max){
max = p[pa[i]].year;
pos = i;
}
}
printf("%d %s %s\n", p[pa[pos]].number, p[pa[pos]].name, p[pa[pos]].role);
for(int j=0; j<11; j++){
if( j != pos) //队长已经选出,现在要排除
printf("%d %s %s\n", p[pa[j]].number, p[pa[j]].name, p[pa[j]].role);
}
free(pa);
}
return 1;
}
int main()
{
Player player[22];
char tmp[10];
scanf("%s", tmp);
while(strcmp(tmp, "0")){
for(int i=0; i<22; i++){
player[i].number = atoi(tmp);
scanf("%s", player[i].name);
scanf("%s", player[i].role);
player[i].year = 0;
scanf("%s", tmp);
while(strlen(tmp) == 9){
player[i].year += GetYears(tmp);
scanf("%s", tmp);
}
}
int d, m, s;
ParseArrangement(tmp, &d, &m, &s);
qsort(player, 22, sizeof(Player), cmp);
Arrangement(player, d, m, s);
printf("\n");
scanf("%s", tmp);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator