题解 | #数据分类处理#, 此题不麻烦就是太繁琐了

数据分类处理

https://www.nowcoder.com/practice/9a763ed59c7243bd8ab706b2da52b7fd

#include <stdio.h>
#include <string.h>

typedef struct{
    char idx;
    char str[16];
    unsigned int num;
}NOD;

void orderArry(NOD * arr, int len)
{
    NOD tmp;
    for(int i = 0; i < len; i++)
    {
        for(int j = i; j <len; j++)
        {
            if(arr[i].num > arr[j].num)
            {
                tmp = arr[i];
                arr[i] = arr[j];
                arr[j] = tmp; 
            }
        }
    }
}

int createR(NOD *s, NOD *t, int sLen)
{
    unsigned int tmp = 0;
    int tLen = 0;
    for(int i = 0; i < sLen; i++)
    {
        if(0 == tLen)
        {
            t[0] = s[0];
            tLen++;
        }else{
            if(t[tLen-1].num != s[i].num)
            {
                t[tLen] = s[i];
                tLen++;
            }
        }
    }
    return tLen;
}

int main() {
    int INum = 0;
    NOD Is[1000] = {0};
    scanf("%d",&INum);
    for(int i = 0; i < INum; i++)
    {
        scanf("%d",&Is[i].num);
        Is[i].idx = i;
        sprintf(Is[i].str,"%d",Is[i].num);
    }
    int RNum = 0;
    NOD Rs[1000] = {0};
    scanf("%d",&RNum);
    for(int i = 0; i < RNum; i++)
    {
        scanf("%d",&Rs[i].num);
        Rs[i].idx = i;
        sprintf(Rs[i].str,"%d",Rs[i].num);
    }
    //排序 Rs
    orderArry(Rs, RNum);

    int RsRLen = 0;
    NOD RsR[1000] = {0};
    RsRLen = createR(Rs, RsR, RNum);

    char RsRFind[1000] = {0};
    int findFlag = 0;
    char* findIndex = (char*)malloc(INum*RsRLen *2);
    int findAllCount = 0;
    int findRCount = 0;
    for(int i = 0; i < RsRLen; i++)
    {
        for(int j = 0; j< INum; j++)
        {
            if(NULL != strstr(Is[j].str,RsR[i].str))
            {
                findFlag = 1;
                findIndex[findAllCount++] = j;
                RsRFind[i]++;
            }
        }
        if(findFlag){
            findRCount++;
        }
        findFlag = 0;
    }
    int AllNum =  findRCount*2 + 2*findAllCount;
    printf("%d ",AllNum);
    int indexTemp = 0;
    for(int i = 0; i < RsRLen; i++)
    {
        if(RsRFind[i] > 0){
            printf("%d %d ",RsR[i].num,RsRFind[i]);
            for(int j = indexTemp; (j < indexTemp + RsRFind[i]) && (j < findAllCount); j++)
            {
                printf("%d %d ",Is[findIndex[j]].idx,Is[findIndex[j]].num);
            }
            indexTemp += RsRFind[i];
        }
    }

    free(findIndex);
    return 0;
}

全部评论

相关推荐

12-01 12:34
已编辑
广东工业大学 Java
如题,fw🐭🐭,加上准备的太晚,大三上已找不到日常实习,导致连锁反应,下学期的暑期实习找不到好的实习,导致秋招找不到中大厂,现在是中小厂Java还有考公的选择,由于有些中小厂工作强度比肩大厂,钱还少,感觉不如考公如果🐮u们是我现在这种情况,会怎么选?
负债的混子:关注你一段时间了,突然发现你头像名字都改了,想必是这段时间压力很大。关于就业还是考公的选择,就像很多牛友说的:不要美化自己没走过的路。你现在想往互联网发展,发现这条路很难走,然后想往考公发展,但是你没走过考公这条路,所以你不知道这条路的压力如何。你今年大三了,还有时间给你做选择,我希望你能够尽快的决定自己的方向,然后一条路走到黑,而不是在这里徘徊,每个人的道路是不一样的,你无法复刻别人的路,你能做的就是尽力的完善自己。 最后,我想说的是,加油,陌生人!
点赞 评论 收藏
分享
面试摇了我吧:啊哈哈面试提前五个小时发,点击不能参加就是放弃
点赞 评论 收藏
分享
11-28 17:48
中山大学 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务