讨论 / 终于得了100
mytbk 2008-12-02 01:14:00
点我顶贴 收藏 删除
#include <stdio.h>

#include <stdlib.h>

#include <string.h>

typedef struct

{

char score[101];

char name[201];

}school;

int cmp(school a,school b)

{

if (strlen(a.score)>strlen(b.score)) return 1;

else if (strlen(a.score)<strlen(b.score)) return 0;

if (strcmp(a.score,b.score)==1) return 1;

else if (strcmp(a.score,b.score)==-1) return 0;

if (strcmp(a.name,b.name)==-1) return 1;

return 0;

}

void swap(school *a,school *b)

{

school tmp;

strcpy(tmp.score,a->score);

strcpy(tmp.name,a->name);

strcpy(a->score,b->score);

strcpy(a->name,b->name);

strcpy(b->score,tmp.score);

strcpy(b->name,tmp.name);

}

void sqsort(school d[],int begin,int end)

{

int i,j,tmp;

school piv;

if (begin>=end) return;

i=begin;j=end;

tmp=begin+rand()*(end-begin)/RAND_MAX;

strcpy(piv.score,d[tmp].score);

strcpy(piv.name,d[tmp].name);

swap(&d[begin],&d[tmp]);

while (i<j)

{

while (i<j&&cmp(d[j],piv)) j--;

strcpy(d[i].score,d[j].score);

strcpy(d[i].name,d[j].name);

while (i<j&&cmp(piv,d[i])) i++;

strcpy(d[j].score,d[i].score);

strcpy(d[j].name,d[i].name);

}

strcpy(d[i].name,piv.name);

strcpy(d[i].score,piv.score);

sqsort(d,begin,i-1);

sqsort(d,i+1,end);

}

int main()

{

int n,i,j,k;

school data[5000];

scanf("%d",&n);

for (i=0;i<n;i++)

{

scanf("%s%s",data[i].name,data[i].score);

if (data[i].score[0]==’0’)

{

for (j=0;data[i].score[j]==’0’;j++);

for (k=0;k<=strlen(data[i].score)-j;k++) data[i].score[k]=data[i].score[k+j];

data[i].score[k]=’\0’;

}

}

sqsort(data,0,n-1);

for (i=n-1;i>=0;i--)

{

printf("%s",data[i].name);

if (i) printf("\n");

}

return 0;

}

第10个数据太阴险了,要不是有人提醒,我可能永远都是90分。

查看更多回复
提交回复