D. 残缺的车牌一

某处发生交通事故,肇事车辆逃逸。现场有价值的线索为若干块残缺的车牌。经技术人员分析得出以下结论,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);
			}
		}
	}
}

菜菜的我
为和不通过

#include<stdio.h>
#include<string.h>
int main()
{
	char a[11];
	fgets(a,11,stdin);
	int n;
	scanf("%d",&n);
	char b[n][11];
	int flag=1;
	for(int i=0;i<n;i++)
	{
		scanf("%s",b[i]);
	}
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<strlen(b[i]);j++)
		{
			if(b[i][j]==a[0])
			{
				flag=1;
				for(int k=0;k<strlen(a);k++)
				{
					if(b[i][j+k]!=a[k])
					{
						flag=0;
						break;
					}
				}
			}
			if(flag==1)
			{
				printf("%s\n",b[i]);
			}
		}
	}
	return 0;
}

好像将fgets变为scanf后就通过了。。。

#include<stdio.h>
#include<string.h>
int main()
{
	char str1[11];
	scanf("%s",str1);
	int n;
	scanf("%d",&n);
	char str2[n][11];
	char b[11];
	for(int i=0;i<n;i++)
	{
		scanf("%s",str2[i]);
	}
	for(int i=1;i<n;i++)//将待检验车牌升序排列 
	{
		for(int j=0;j<n-i;j++)
		{
			if(strcmp(str2[j],str2[j+1])>0)
			{
				strcpy(b,str2[j]);
				strcpy(str2[j],str2[j+1]);
				strcpy(str2[j+1],b);
			}
		}
	}
	int flag=1;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<strlen(str2[i]);j++)
		{
			if(str2[i][j]==str1[0])
			{
				flag=1;
				for(int k=0;k<strlen(str1)&&flag==1;k++)
				{
					if(str2[i][j+k]!=str1[k])
					{
						flag=0;
					}
				}
				if(flag==1)
				{
					puts(str2[i]);
				}
			}
		}
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值