您的位置:首页 > 其它

Hdu 3293 - sort

2012-11-04 21:35 211 查看
排序题    字典序

 

 

题目的大致意思是:

每一种武器都有它们的名字,产地,和伤害等级。

在排序时,先排产地。按字典序从a ~ z 排序,如果一个产地里有多种武器,那也把武器排列在一起;然后,在每一个产地里,再根据它们的伤害等级排列,从高级到低级分别是 wonderful  ~  good  ~  so-so  ;最后如果两个或者两个以上的武器有相同的产地和伤害等级,那就根据名字的字典序排列。

主要思路是用 C++ 里面的strcmp函数,快排,qsort,结构体表示武器的名字,产地和伤害等级。

最后要注意输出格式。首先注意Case 1;其次注意产地下的武器在输出前有十个空格。

 

 

AC代码:

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
struct Weapon
{
char name[21];
char origin[21];
char level[21];
};
Weapon weapon [505];
int cmp(const void *c,const void *d)
{
Weapon *a = (Weapon *)c;
Weapon *b = (Weapon *)d;
if(!strcmp(a->origin , b->origin))
{
if(!strcmp(a->level , b->level))
{
return strcmp(a->name , b->name);
}
else
{
if('w' == a->level[0])
return -1;
else if('w' == b->level[0])
return 1;
else if('g' == a->level[0])
return -1;
else if('g' == b->level[0])
return 1;
else if('s' == a->level[0])
return -1;
else if('s' == b->level[0])
return 1;
}
}
return strcmp(a->origin , b->origin);
}
int main()
{
int n,i,t;
t=1;
while(scanf("%d",&n)!=EOF)
{
int flag;
char str[21];
for(i=0;i<n;i++)
{
scanf("%s%s%s", weapon[i].name, weapon[i].origin, weapon[i].level);
}
qsort(weapon,n,sizeof(Weapon),cmp);
strcmp(str,weapon[0].origin);
flag = 1;
printf("Case %d\n",t++);
for(i=0;i<n;i++)
{
if(strcmp(str,weapon[i].origin))
{
flag = 1;
strcpy(str,weapon[i].origin);
}
if(!strcmp(str,weapon[i].origin) && flag == 1)
{
printf("%s:\n",weapon[i].origin);
flag = 2;
}
if(flag == 2)
{
printf("          %s %s\n",weapon[i].name,weapon[i].level);
}
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: