问题链接:HDU1106 排序。
问题简述:参见上述链接。
问题分析:这个程序的逻辑并不十分复杂,主要是字符串处理和数字字符串转整数的问题。
程序说明:程序中,使用C语言的库函数strtok来切割字符串,并且以数字字符“5”作为分隔符,处理起来就简单多了。数字字符串转整数使用库函数atoi()来实现,排序使用库函数qsort()来实现。
参考链接:HDU1106
排序。改程序是基于自动机原理编写的程序,需要考虑状态转换,逻辑稍微复杂一些,代码也略长,相当于是纯手工编程。
AC的C语言程序如下:
/* HDU1106 排序(解法二) */ #include <stdio.h> #include <stdlib.h> #include <string.h> int cmp(const void *a,const void *b) { return *(int*)a - *(int*)b; } int main(void) { char s[1024]; int values[1024], count, i; char delim[] = "5"; char *p; while(gets(s) != NULL) { count = 0; p = strtok(s, delim); while(p) { values[count++] = atoi(p); p = strtok(NULL, delim); } if(count > 0) { qsort(values, count, sizeof(values[0]), cmp); for(i=0; i<count-1; i++) printf("%d ", values[i]); printf("%d ", values[count-1]); } } return 0; }