就是运行时间比较长,唉。。。 #include <stdio.h> #include <stdlib.h> #include <string.h> int i,j; long int temp; /*删除重复项并排序输出排序后的R数组地址和元素个数。*/ int de_repeat_sort(long int R[],int num2) { long int dp[num2]; for(i=0;i<num2;i++) { for(j=0;j<num2-1;j++) { if(R[j]>R[j+1]) { temp=R[j]; R[j]=R[j+1]; R[j+1]=temp; } if(R[j]==R[j+1]) { R[j+1]=-1; } } } j=0; for(i=0;i<num2;i++) { if(R[i]!=-1) { dp[j]=R[i]; j++; } } num2=j; j=0; for(i=0;i<num2;i++) { R[i]=dp[i]; j++; } return num2; } int main() { long int I[1000],R[1000]; int num1,num2,num=0,num3=0; char str_R[30],str_I[30]; while(scanf("%d",&num1)!=EOF) { for(i=0;i<num1;i++) { scanf("%ld",&I[i]); } scanf("%d",&num2); for(i=0;i<num2;i++) { scanf("%ld",&R[i]); } num2=de_repeat_sort(R,num2);//排序 /*计算输出的总元素个数。*/ for(i=0;i<num2;i++) { sprintf(str_R,"%ld",R[i]); for(j=0;j<num1;j++) { sprintf(str_I,"%ld",I[j]); if(strstr(str_I,str_R)) { num=num+2; num3++; } } if(num3>0) { num=num+2; num3=0; } } printf("%d ",num);//输出总元素个数; num=0; /*按要求输出各个满足条件的元素。*/ for(i=0;i<num2;i++) { sprintf(str_R,"%ld",R[i]);//整形数据打印成字符型数据; for(j=0;j<num1;j++) { sprintf(str_I,"%ld",I[j]); if(strstr(str_I,str_R))//字符串是否包含判断; { num++; } } if(num>0) { printf("%ld %d ",R[i],num); for(j=0;j<num1;j++) { sprintf(str_I,"%ld",I[j]); if(strstr(str_I,str_R)) { printf("%d %ld ",j,I[j]); } } num=0; } } printf("\n"); } }