问题描述:数据分类处理_牛客题霸_牛客网
#include <stdio.h>
#include <string.h>
#define N 100
#define M 32
int cnt=1;
int match(char str1[],char str2[],int len1,int len2)
{
int k=0;
int i=k,j=0;
while(i<len1&&j<len2)
{
if(str1[i]==str2[j])
{
i++;
j++;
}
else
{
k++;
i=k;
j=0;
}
}
if(j==len2)
return 1;
else
return 0;
}
int main()
{
int numi,numr,I[N],R[N],i,j,k,arr[3*N],temp,flag,flag1[N],left,right,len1,len2;
char str1[N][M],str2[N][M],ch;
scanf("%d",&numi);
for(i=0;i<numi;i++)
{
scanf("%d",&I[i]);
temp=I[i];
j=0;
if(temp==0)
{
str1[i][0]='0';
str1[i][1]='\0';
}
else
{
left=0;right=0;
while(temp>0)
{
str1[i][j++]=temp%10+'0';
temp/=10;
right++;
}
str1[i][right]='\0';
right--;
while(left<right)
{
ch=str1[i][left];
str1[i][left]=str1[i][right];
str1[i][right]=ch;
left++;right--;
}
}
}
scanf("%d",&numr);
for(i=0,j=0;i<numr;i++)
{
scanf("%d",&temp);
if(i==0)
{
R[j++]=temp;
}
else
{
flag=0;
for(k=0;k<j;k++)
{
if(temp==R[k])
{
flag=1;break;
}
}
if(flag==0)
{
R[j++]=temp;
}
}
}
k=j;
for(i=0;i<k-1;i++)
{
for(j=0;j<k-1-i;j++)
{
if(R[j]>R[j+1])
{
temp=R[j];
R[j]=R[j+1];
R[j+1]=temp;
}
}
}
for(i=0;i<k;i++)
{
j=0;
if(R[i]==0)
{
str2[i][0]='0';
str2[i][1]='\0';
}
else
{
left=0;right=0;temp=R[i];
while(temp>0)
{
str2[i][j++]=temp%10+'0';
temp/=10;
right++;
}
str2[i][right]='\0';
right--;
while(left<right)
{
ch=str2[i][left];
str2[i][left]=str2[i][right];
str2[i][right]=ch;
left++;right--;
}
}
}
for(i=0;i<k;i++)
{
len2=strlen(str2[i]); //str2为要查找的子串序列
temp=0;
for(j=0;j<numi;j++)
{
flag1[j]=0;
len1=strlen(str1[j]); //str1为主串序列
flag1[j]=match(str1[j],str2[i],len1,len2);
temp+=flag1[j];
}
if(temp!=0)
{
arr[cnt++]=R[i];
arr[cnt++]=temp;
for(j=0;j<numi;j++)
{
if(flag1[j]==1)
{
arr[cnt++]=j;
arr[cnt++]=I[j];
}
}
}
}
arr[0]=cnt-1;
for(i=0;i<cnt;i++)
{
printf("%d ",arr[i]);
}
return 0;
}