题意是给你一堆数字, 让你判断其中有没有一个是另一个的前缀.
我的解法是开一个二维数组, 把输入存进去之后按字符串长度排序, 然后依次比较.
如何确定一个数a是另一个数b的前缀?
第一个条件, a[0] = b[0];
第二个条件strstr(b, a) = &b[0], 也就是说返回的地址就是b的第一个数字的地址.
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
int comp(const void *_a, const void *_b)
{
char *a = (char *)_a;
char *b = (char *)_b;
return strlen(a) - strlen(b);
}
int main()
{
//freopen("input.txt", "r", stdin);
int i, j;
char num[1100][1000];
int n;
int flag;
while (scanf("%d", &n))
{
getchar();
if (n == 0)
break;
for (i = 0; i < n; i++)
gets(num[i]);
qsort(num, n, sizeof(num[0]), comp);
for (i = 0; i < n; i++)
{
flag = 0;
char *c;
int cnt = 0;
for (j = i; j < n; j++)
{
c = strstr(num[j], num[i]);
if (num[i][0] == num[j][0] && c == &num[j][0])
{
if (cnt == 0)
{
cnt++;
continue;
}
else
{
printf("NO\n");
flag = 1;
break;
}
}
}
if (flag == 1)
break;
}
if (flag == 0)
printf("YES\n");
}
return 0;
}