最开始想得太复杂了,想用结构体之类的来实现,后面发现不需要,一个数组走遍天下
思路:1、循环获取R的时候,给R排序
2、将得到的R去重
3、循环去重后的R,将R[i]用sprintf方法转换成char类型,循环I,将I[j]用sprintf方法转换成char类型,用strstr(I[j],R[i])方法判断是否是子字符串,是则加入数组
4、整理数组
c语言的代码如下所示
#include<stdio.h> int main(void){ int a,n,m,i,j; while(scanf("%d",&n)!=EOF){ int I[1000]={0},R[1000]={0},R1[1000] = {0},sum[1000] ={0}; //获取I for(i=0;i<n;i++) scanf("%d",&I[i]); //获取并得到排序后的R scanf("%d",&m); for(i=0;i<m;i++){ scanf("%d",&R1[i]); //从小到大排序 a=R1[i]; for(j=i-1;j>=0;j--){ if(R1[j] > a){ R1[j+1] = R1[j]; R1[j] = a; } } } //R去重 R[0] = R1[0]; j=1; for(i=1;i<m;i++){ if(R1[i] != R1[i-1]){ R[j] = R1[i]; j++; } } m=j; //查找R在I中的索引和value //思路:循环R,找到R[i]对应的I的key和value,并保存,再统计到sum中 char s1[20],s2[20]; int key=0,count = 0; for(i=0;i<m;i++){ int rSum[1000] = {0}; key = 0; sprintf(s1, "%d", R[i]); for(j=0;j<n;j++){ sprintf(s2, "%d",I[j]); if(strstr(s2,s1)){ rSum[key] = j; key++; rSum[key] = I[j]; key++; } } //有数据,一起处理 if(key > 0){ //先将R[i]和数目放入 sum[count] = R[i]; count++; sum[count] = key/2; count++; //放对应的数据 for(j=0;j<key;j++){ sum[count] = rSum[j]; count++; } } } printf("%d ",count); for(int i = 0;i<count;i++) printf("%d ",sum[i]); printf("\n"); } return 0; }