模拟题啊,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
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/29042
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!