题解 | #数据分类处理#

数据分类处理

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;
}
全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务