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