//代码中有自己调试的一些代码, 后期自己添加了一些注释, 主要是题目意思太难懂了, 理解了好长时间. 功夫不负有心人, 最后终于用纯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"); }
}