题解 | #数据分类处理#
数据分类处理
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; }