某处发生交通事故,肇事车辆逃逸。现场有价值的线索为若干块残缺的车牌。经技术人员分析得出以下结论,1、这些残缺的车牌来自同一块车牌且为肇事车辆悬挂;2、每块上只包含一个可以辨认的号码;3、这些号码的顺序是可以确定的。现请你根据这些信息写一段程序判断某车牌是否可能是肇事车辆当时悬挂的车牌。
输入第一行为一个字符串(字符串中只包含大写字母及数字,且长度不超过10),代表通过残缺车牌识别出的号码且这些号码已按应有的次序排好,也就是说如果在输入的字符串中某个号码(比如A)排在另外一个号码(比如B)的前边,那么在完整的车牌中A也必定在B前边;第二行为一个正整数n(0<n<200),代表待检验车牌的数量;后边n行,每行均为一个长度为10的字符串(字符串中只包含大写字母及数字),代表n个待检验车牌。
输出为若干行,每行为一个可能的肇事车辆的车牌(多行数据输出的顺序为:按字符串大小由小到大输出,如AAAAA00000在AAAAB00000前边输出)。测试用例保证输入合法且至少有一个车牌可能是肇事车辆的车牌。
输入样例
A0
2
AAA0000123
BBB0000123
输出样例
AAA0000123
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
void sort(char a[][20],int n);
int main()
{
char st1[20];//st1是检测的字符,st2是待检测车牌号,st3用来放合适的字符
int n,i,j,k;
gets(st1);
scanf("%d",&n);
char st2[n][20];
for(i=0;i<n;i++)
scanf("%s",st2[i]);
char st3[n][20];
int loc=0,count=0;
for(i=0;i<n;i++)//遍历待检测字符数组的每一行
{
for(j=0,loc=0;st2[i][j];j++)//以下来自一位大佬的算法
{
if(st2[i][j]==st1[loc]&&st1[loc])
loc++;
}
if(st1[loc]=='\0')
strcpy(st3[count++],st2[i]);
}
sort(st3,count);
for(i=0;i<count;i++)
puts(st3[i]);
}
void sort(char a[][20],int n)//冒泡排序
{
int loc=n-1;
char b[210];
int i;
for(loc=n-1;loc>=1;loc--)
{
for(i=0;i<loc;i++)
{
if(strcmp(a[i],a[i+1])>0)
{
strcpy(b,a[i]);
strcpy(a[i],a[i+1]);
strcpy(a[i+1],b);
}
}
}
}