题解 | #数据分类处理#
数据分类处理
https://www.nowcoder.com/practice/9a763ed59c7243bd8ab706b2da52b7fd
#include<iostream> #include<vector> #include<algorithm> using namespace std; bool check(int r, int i){//检查数字i包含数字r if(r > i) //i比r还小,不可能 return false; int top = 1; while(r / top != 0) //记录每次要连续除10的多少次方,余数才能和r比较 top *= 10; if(r == 0) top = 10; int k = 0; while(i * 10 / top != 0){ //连除比较 if((i % top) == r) return true; i /= 10; } return false; } int main(){ int n, m; //记录序列I和序列R的大小 while(cin >> n){ vector<int> I(n); for(int i = 0; i < n; i++) cin >> I[i]; //输入n个整数序列I cin >> m; //整数序列R的长度 vector<int> R(m); for(int i = 0; i < m; i++) //输入m个整数序列R cin >> R[i]; sort(R.begin(), R.end()); //排序 vector<int> res; for(int i = 0; i < m; i++){ if(i != 0 && R[i] == R[i - 1]) //去重 continue; int count = 0; vector<int> index; //记录符合条件的下标 for(int j = 0; j < n; j++){ if(check(R[i], I[j])){ count++; index.push_back(j); } } if(count != 0){ //如果有出现连续的R[i],添加头部的R[i]及后面有多少个数中出现了 res.push_back(R[i]); res.push_back(count); for(int & j : index){ res.push_back(j); res.push_back(I[j]); } } } cout << res.size(); //先输出个数 for(int re : res) //再逐个输出 cout << " " << re; cout << endl; } return 0; }