题目描述
某处发生交通事故,肇事车辆逃逸。现场有价值的线索为若干块残缺的车牌。经技术人员分析得出以下结论,1、这些残缺的车牌来自同一块车牌且为肇事车辆悬挂;2、每块上只包含一个可以辨认的号码;3、这些号码的顺序是可以确定的。现请你根据这些信息写一段程序判断某车牌是否可能是肇事车辆当时悬挂的车牌。
输入第一行为一个字符串(字符串中只包含大写字母及数字,且长度不超过10),代表通过残缺车牌识别出的号码且这些号码已按应有的次序排好,也就是说如果在输入的字符串中某个号码(比如A)排在另外一个号码(比如B)的前边,那么在完整的车牌中A也必定在B前边;第二行为一个正整数n(0<n<200),代表待检验车牌的数量;后边n行,每行均为一个长度为10的字符串(字符串中只包含大写字母及数字),代表n个待检验车牌。
输出为若干行,每行为一个可能的肇事车辆的车牌(多行数据输出的顺序为:按字符串大小由小到大输出,如AAAAA00000在AAAAB00000前边输出)。测试用例保证输入合法且至少有一个车牌可能是肇事车辆的车牌。
#include <stdio.h>
#include <string.h>
int main(void)
{
char a[10];
int n,z;
char b[200][10],c[200][10],temp[200];
int i,row,col,m=0,loc,q;
scanf("%s",a);
scanf("%d",&n);
getchar();
for(row=0;row<n;row++) //读入二维字符数组
{
for(col=0;col<10;col++)
scanf("%c",&b[row][col]);
getchar();
}
int y=strlen(a);
for(row=0;row<n;row++) //判断是否符合
{ i=0;
for( z=0;z<10&&i<y;z++)
{
if(a[i]==b[row][z])
{
i++;
}
}
if(i==y)
{
for(int q=0;q<10;q++)
c[m][q]=b[row][q];
m++;
}
}
for(loc=0;loc<m-1;loc++) //冒泡排序
{
for(i=m-1;i>=loc+1;i--)
{
for(int w=0;w<10;w++)
{
if(c[i][w]>c[i-1][w])
break;
else if(c[i][w]<c[i-1][w])
{
for(q=0;q<10;q++) //两行交换
{
temp[q]=c[i][q];
c[i][q]=c[i-1][q];
c[i-1][q]=temp[q];
}
break;
}
}
}
}
for(row=0;row<m;row++) //打印出二维数组
{
for(col=0;col<10;col++)
printf("%c",c[row][col]);
printf("\n");
}
return 0;
}
亲测可过