我们知道,如果电话号码A是另一个电话号码B的前缀,则B无法被呼叫。例如,A是123而B是12345,按123后,我们调用A,并且不能调用B.给定N个电话号码,您的任务是查找是否存在两个数字A和B,即A是B的前缀。
输入
输入由几个测试用例组成。每个测试用例的第一行输入包含一个整数N(0 <N <1001),表示电话号码的数量。下一行包含N个整数,用于描述电话号码。最后一种情况后面跟着一个包含一个零的行。
产量
对于每个测试用例,如果有退出的电话号码不能被呼叫,请打印“否”,否则请打印“是”。
示例输入
2 012 012345 2 12 012345 0
示例输出
没有 是
#include <iostream>
#include<stdio.h>#include<string.h>
#include<algorithm>
using namespace std;
char a[1001][30];
bool cmp(char *a,char *b)
{
return strcmp(a,b)<0;
}
int main()
{
int n,i,z,j,k,b;
char *p[1001],d[30];
for(;;)
{
z=0;
scanf("%d",&n);
if(n==0)
break;
getchar();
for(i=0;i<=n-1;i++)
{
gets(a[i]);
p[i]=a[i];
}
sort(p,p+n,cmp);
for(i=0;i<=n-2;i++)
{
b=strlen(a[i]);
for(j=i+1;j<=n-1;j++)
{
for(k=0;k<=b-1;k++)
d[k]=a[j][k];
d[k]=0;
if(strcmp(d,a[i])==0)
{z=1;break;}
}
if(z==1)
break;
}
if(z==1)
printf("NO\n");
if(z==0)
printf("YES\n");
}
return 0;
}