//代码中有自己调试的一些代码, 后期自己添加了一些注释, 主要是题目意思太难懂了, 理解了好长时间. 功夫不负有心人, 最后终于用纯c解答了此题, 希望对大家有借鉴意义
include "stdlib.h"
include "stdio.h"
//查看a中是否包括b 如 147 47 --return 1
int isb(int a,int b)
{
int res=0;
int b_num=0;
int b_kvalue=1;
int b2=b;
//printf("a:%d b:%d \n",a,b);
while(b2)
{
b2=b2/10;
b_kvalue=b_kvalue*10; //判断b是几位数字, 则b_kvalue为多少: 如 b=47, b_kvalue为100
b_num++;
}
while(a>0)
{
if(a%b_kvalue==b)
{
res=1;
return res;
}
a=a/10;
}
return res;}
int main()
{
int c[10000]={0};
int tem;
int result[10000]={0};
int flag;
int m,n;
while(scanf("%d",&m) != EOF)
{
int index=0;
int index2=0;
int index3=0;
int count_result=0;
int c[10000]={0};
int tem;
int result[10000]={0};
int flag;
//scanf("%d",&m);
int a[m];
for(int i=0;i<m;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&n);
int b[n];
int b2[n];
for(int i=0;i<n;i++)
{
scanf("%d",&b[i]);
}
for(int i=0;i<n;i++)
{
c[b[i]]++;
}
for(int i=0;i<10000;i++)
{
if(c[i]>0)
{
// printf("test:%d\n",i);
b[index]=i; //筒排序, 将b去重然并排序
index++;
}
}
/*
printf("m:%d n:%d index:%d\n",m,n,index);
for(int i=0;i<m;i++)
{
printf("%d ",a[i]);
}
printf("\n");
for(int i=0;i<index;i++)
{
printf("%d ",b[i]);
}
printf("\n");*/
for(int i=0;i<index;i++) //b 个数
{
for(int j=0;j<m;j++) //a个数
{
// printf("test1 ");
flag=0;
if(isb(a[j],b[i]))
{
flag=1; //判断a中所有数字(j)是否有包含b中第i数字, 如果包含则置位flag
//printf("test2 ");
break;
}
}
if(flag==1)
{
index3=index2;
index2=index2+2; //如果flag为1, 则偏移2个位置
}
for(int j=0;j<m;j++) //将所有 a中包含b中第i个数字的索引j,和数字a[j], 放入数组
{
if(isb(a[j],b[i]))
{
result[index2++]=j; //最后将 数字b[i]和a中数字包含b[i]的个数,放入数组
result[index2++]=a[j]; //数组总共有几个数字
}
}
if(flag==1)
{
result[index3]=b[i];
result[index3+1]=(index2-index3)/2-1;
count_result=index2;
}
}
printf("%d ",count_result); //打印数组总共几个数字
for(int i=0;i<index2;i++) //打印数组
{
printf("%d ",result[i]);
}
printf("\n");
}}

京公网安备 11010502036488号