排序后相似前缀就会相邻,那样就比较好处理了。
#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;
}