题解 | #数据分类处理#

数据分类处理

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

注意点:
R序列可能有0,也可能为多位数;
【因为对字符串和结构体不熟悉,所以就是纯“算术”,利用数组处理】
length_r:判断R序列元素为几位数;
cal:判断I序列是否包含R序列中某元素;

#include <iostream>
#include <math.h>
using namespace std;

int length_r(int r){
    int length_r=0;;
    int r2=r;
    if(r2==0){
        return 10;
    }else{
        while(r2>=1){
        length_r=length_r+1;
        r2=r2/10;
        }
        return (int)(pow(10,length_r));
    }
}

int cal(int i,int r,int len){
    while(i>=1){
        if(i%len==r){
            return 0;
            break;
        }
        i=i/10;
    }
    if(i<1){
        return 1;
    }
}

int main(void){
    int innum;
    while(cin>>innum){
        int iarray[innum];
        for(int i=0;i<innum;i++){
            cin>>iarray[i];
        }
        int findnum;
        cin>>findnum;
        int rarray[findnum];
        for(int i=0;i<findnum;i++){
            cin>>rarray[i];
        }

        int temp;
        int rnum=1;
        for(int i=0;i<findnum-1;i++){
            for(int k=i+1;k<findnum;k++){
                if(rarray[i]>rarray[k]){
                temp=rarray[i];
                rarray[i]=rarray[k];
                rarray[k]=temp;
                }
            }
        }
        int newrarray[findnum];
        newrarray[0]=rarray[0];
        for(int i=1;i<findnum;i++){
            if(rarray[i]!=rarray[i-1]){
                newrarray[rnum]=rarray[i];
                rnum=rnum+1;
            }
        }

        //开始计算
        int i_idx[rnum][innum];
        int idx_num[rnum];
        int i_chosed[rnum][innum];
        int first_num=0;
        for(int i=0;i<rnum;i++){
            idx_num[i]=0;
            int len=length_r(newrarray[i]);
            //cout<<' '<<len<<endl;
            for(int k=0;k<innum;k++){
                if(cal(iarray[k],newrarray[i],len)==0){
                    i_idx[i][idx_num[i]]=k;
                    i_chosed[i][idx_num[i]]=iarray[k];
                    idx_num[i]=idx_num[i]+1;
                }
            }
            if(idx_num[i]!=0){
                first_num=first_num+idx_num[i]*2+2;
            }
        }

        //输出
        cout<<first_num<<' ';
        for(int i=0;i<rnum;i++){
            if(idx_num[i]==0) continue;
            cout<<newrarray[i]<<' '<<idx_num[i]<<' ';
            for(int k=0;k<idx_num[i];k++){
                cout<<i_idx[i][k]<<' '<<i_chosed[i][k]<<' ';
            }
        }
        cout<<endl;
    }
   return 0;
}
全部评论

相关推荐

球球别再泡了:坏,我单9要了14
点赞 评论 收藏
分享
努力学习的小绵羊:我反倒觉得这种挺好的,给不到我想要的就别浪费大家时间了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务