n 个小朋友在玩游戏,编号依次为 1∼n。
每个小朋友都有一个身份,为 rat(老鼠)、woman(女人)、child(孩子)、man(男人)、captain(舰长) 之一。
已知,这几种身份的优先级是有区别的:
rat 为第一优先级。
woman 和 child 为第二优先级。
man 为第三优先级。
captain 为第四优先级。
现在,要给小朋友们排序,排序的规则为:
对于不同优先级的小朋友,优先级越靠前(越小)则在队伍中的位置越靠前。
对于同一优先级的小朋友,编号越小则在队伍中的位置越靠前。
请你确定小朋友们的具体排列顺序。
输入格式:
第一行包含整数 n。
接下来 n 行,其中第 i 行用来描述编号为 i 的小朋友,首先包含一个字符串,表示小朋友的名字,然后包含一个字符串,表示他的身份。
每个小朋友的名字都是一个长度范围在 [1,10] 的由英文字母构成的字符串,其中首字母大写,其余小写。
小朋友的名字两两不同。
表示身份的字符串一定是 rat、woman、child、man、captain 之一。
输出格式:
共 n(1≤n≤100 )行,其中第 i 行输出排在队伍中第 i 位的小朋友的名字。
输入样例:
2
Jack captain
Alice woman
输出样例:
Alice
Jack
这道题十分的简单,首先我们要对小孩身份进行讨论,接着再对小孩的编号进行讨论。原因是身份的优先级要大于编号,题目中明确讲道身份优先级越高,便排在前面。
正是因为题目过于简单,所以我只是随便看了一下题目就匆匆开始敲代码。我原本以为不同身份优先级是不同的,没想到这老六偷偷下套,woman和child优先级相同。不过还好,问题不大,只是差点怀疑人生。
写这个博客的目的就是告诫自己要认真看题。
代码如下
#include<stdio.h>
#include<math.h>
#include<string.h>
int main() {
char arrname[200][20];
char arridentity[200][10];
char arr[5][20] = { "rat","woman","child","man","captain" };
int n;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%s", arrname[i]);
scanf("%s", arridentity[i]);
}
for (int j = 0; j < 5; j++) {
if (j == 1)
continue;
if(j!=2) {
for (int i = 1; i <= n; i++) {
if (strcmp(arr[j], arridentity[i]) == 0) {
printf("%s\n", arrname[i]);
}
}
}
else {
for (int i = 1; i <= n; i++) {
if ((strcmp(arr[1], arridentity[i]) == 0) || (strcmp(arr[2], arridentity[i]) == 0)) {
printf("%s\n", arrname[i]);
}
}
}
}
return 0;
}
如有不懂,欢迎评论。