排序后相似前缀就会相邻,那样就比较好处理了。
#include <stdio.h> #include <stdlib.h> #include <string.h> #define min(a, b) ((a)<(b)?(a):(b)) char str[1000][100]; int cmp(const void* _a, const void *_b) { char *a = (char*)_a; char *b = (char*)_b; return strcmp(a, b); } bool is_decode(int n) { int i, j, m; for (i=1; i<n; i++) { m = min(strlen(str[i-1]), strlen(str[i])); for (j=0; j<m; j++) if (str[i][j] != str[i-1][j]) break; if (j == m) return false; } return true; } int main() { int count = 1; while (scanf("%s", str[0]) != EOF) { int i = 1; while (scanf("%s", str[i]) && str[i][0] != '9') i++; qsort(str, i, sizeof (str[0]), cmp); if (is_decode(i)) printf("Set %d is immediately decodable\n", count++); else printf("Set %d is not immediately decodable\n", count++); } return 0; }