最开始想得太复杂了,想用结构体之类的来实现,后面发现不需要,一个数组走遍天下
思路: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;
}
京公网安备 11010502036488号