考试排名

模拟题啊,wa了好几次,原来是没有看清题意,悲剧啊。。

不过做模拟题还是有意思啊。。还有通过这道题发现自己真的不太擅长字符串处理,开始搞错了,最后为了出错,写得代码有点多。。

#include <stdio.h>
#include
<string.h>
#include
<stdlib.h>
#include
<ctype.h>

struct node {
int ac;
char name[40];
int sum;
}T[
1010];

char mark1[10],mark2[10];
int x;

int find ( char *s )
{
int i, k = 0, flag = 0, flag1 = 0, l = 0;
for ( i = 0;i < strlen(s); ) {
if (s[i-1] == '('&& i!= 0) {
while ( s[i] != ')' && s[i] != '\0' )
mark1[k
++] = s[i++],
flag
= 1;
}
else
{
if ( !flag1)
while(s[i] != '(' && s[i] != '\0' )
mark2[l
++] = s[i++],flag1 = 1;
i
++;

}

}
if(flag1) {
mark2[l]
= '\0';
x
= atoi(mark2);

}
if (flag) {
mark1[k]
= '\0';
k
= atoi(mark1);
return k;
}

return 0;
}


void init( )
{
memset(T,
0, sizeof(T));
}

int cmp(const void *a, const void *b)
{
if ((*(node *)a).ac != (*(node *)b).ac )
return (*(node *)b).ac - (*(node *)a).ac;
if ((*(node *)a).sum != (*(node *)b).sum )
return (*(node *)a).sum - (*(node *)b).sum;
return strcmp((*(node *)a).name,(*(node *)b).name);

}

int main( )
{

#ifdef P
freopen("in","r",stdin);
freopen("out","w",stdout);
#endif

int N, G, i, j, k, m, n;
char str[20];

while (scanf("%d%d", &N, &G) != EOF) {
i
= 0;
init( );
n
= 0;
// for (m = 0; m < 6; m++) {
while (scanf("%s",T[i].name)!= EOF) {
// scanf("%s",T[i].name);
n++;
for ( j = 1; j <= N; j++) {
scanf(
"%s",str);
if (str[0] == '-' || str[0] == '0' )
continue;
k
= find (str);
T[i].ac
++;
if (k == 0 )
T[i].sum
+= x;
else
T[i].sum
+= k * G + x;
}
i
++;
}
qsort(T,n,
sizeof(T[0]),cmp);
for (i = 0; i < n; i++)
printf(
"%-10s %2d %4d\n",T[i].name, T[i].ac, T[i].sum);
}
return 0;
}

  

posted on 2011-07-20 11:10  more think, more gains  阅读(172)  评论(0编辑  收藏  举报

导航