考试排名

模拟题啊,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;
}

  

转载于:https://www.cnblogs.com/tangcong/archive/2011/07/20/2111415.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值