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