题意:输入一个整数n,然后输入n个长度不超过20的字符串,需要输出排序后的n个字符串,
排序规则:先按照长度排序,长度小的排前面,长度相等的按照字典序排列,字典序小的排前面。
最后输入一个字符串,需要输出改字符串在原输入时的序号和排序后的序号,如果不存在,则输出None。
input:
5
ab
c
def
dfa
f
dfa
output:
c
f
ab
def
dfa
4 5
#include <stdio.h> #include <string.h> // a是否大于 b int cmp(char a[25], char b[25]){ int f; if(strlen(a) > strlen(b)){ return 1; } else if(strlen(a) < strlen(b)){ return 0; } else{ f = strcmp(a, b); if(f < 0){ return 0; } else if(f > 0){ return 1; } else{ return 0; } } } int main(){ int i, j, n; char a[25][25]; char b[25][25]; char c[25]; char buf[25]; int f = 1; scanf("%d", &n); for(i = 1; i <= n; i++){ scanf("%s", &a[i]); strcpy(b[i], a[i]); } //排序: for (i = 1; i<= n-1; ++i) //比较n-1轮 { for (j=1; j<= n-i; ++j) //每轮比较n-1-i次, { if(cmp(a[j], a[j+1])) { // printf("%s %s ", a[j], a[j+1]); strcpy(buf, a[j]); strcpy(a[j], a[j+1]); strcpy(a[j+1], buf); } } } for(i = 1; i <= n; i++){ printf("%s ", a[i]); } scanf("%s", c); for(i = 1; i <= n; i++){ // printf("%s ", b[i]); if(strcmp(c, b[i]) == 0){ printf("%d ", i); f = 0; break; } } if(f == 1){ printf("None"); } else for(i = 1; i <= n; i++){ // printf("%s ", b[i]); if(strcmp(c, a[i]) == 0){ printf("%d", i); break; } } return 0; } /* 题意:输入一个整数n,然后输入n个长度不超过20的字符串,需要输出排序后的n个字符串, 排序规则:先按照长度排序,长度小的排前面,长度相等的按照字典序排列,字典序小的排前面。 最后输入一个字符串,需要输出改字符串在原输入时的序号和排序后的序号,如果不存在,则输出None。 input: 5 ab c def dfa f dfa output: c f ab def dfa 4 5 */