题解 | #数据分类处理#
数据分类处理
https://www.nowcoder.com/practice/9a763ed59c7243bd8ab706b2da52b7fd
C语言,使用qsort排序,然后去重后放入st_R数组,通过strstr函数检查是否被I中包含,最后输出结果。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct{
int val;
int index[100];
int idxNums;
} ST_R;
ST_R st_R[100];
int cmp(int* a, int *b){
return (*a)>(*b) ? 1: -1;
}
int check(int ival, int rval){
int ret = 0;
char str_R[10];
char str_I[10];
memset(str_R, 0, sizeof(str_R));
memset(str_I, 0, sizeof(str_I));
sprintf(str_I, "%d", ival);
sprintf(str_R, "%d", rval);
if(strstr(str_I, str_R)==NULL){
ret = 0;
}
else{
ret = 1;
}
return ret;
}
int main() {
int arr_R[100] = {0};
int arr_I[100] = {0};
int len_st_R = 0;
memset(st_R, 0, sizeof(st_R));
int numR = 0;
int numI = 0;
scanf("%d ", &numI);
for (int i=0; i<numI; i++) {
scanf("%d ", &arr_I[i]);
}
scanf("%d ", &numR);
for (int i=0; i<numR; i++) {
scanf("%d ", &arr_R[i]);
}
qsort(arr_R, numR, sizeof(int), cmp); //自增排序
int tmp=-1;
for(int i=0; i<numR; i++){
if(tmp != arr_R[i]){
st_R[len_st_R].val = arr_R[i]; //去重后加入结构体数组
len_st_R++;
}
tmp = arr_R[i];
}
for(int i=0; i<len_st_R; i++){
for(int j=0; j<numI; j++){
if(1==check(arr_I[j], st_R[i].val)){ //检查是否包含
st_R[i].index[ st_R[i].idxNums ] = j;
st_R[i].idxNums++;
}
}
}
int outNum=0;
for (int i=0; i<len_st_R; i++) {
if( st_R[i].idxNums!=0 ){
outNum += 2+2*st_R[i].idxNums; //计算输出后续总数
}
}
printf("%d ", outNum);
for (int i=0; i<len_st_R; i++) {
if( st_R[i].idxNums!=0 ){
printf("%d ", st_R[i].val); //输出R<i>值
printf("%d ", st_R[i].idxNums); //输出R<i>被包含的个数
for (int j=0; j<st_R[i].idxNums; j++) {
printf("%d ", st_R[i].index[j]); //输出包含R<i>的I中的下标
printf("%d ", arr_I[ st_R[i].index[j] ]);//输出包含R<i>的I中的值
}
}
}
return 0;
}

迅雷公司福利 193人发布