#include "stdafx.h"
#include<iostream>
#include<algorithm>
#include<vector>
#include<unordered_map>
using namespace std;
int compare(int a, int b) {
return a > b;
}
void function(vector<int> &vec) {
unordered_map<int,int> m;
int i, j, a;
for (i = 0; i < vec.size(); i++) {
j = i;
a = vec[i];
while (a!=1) {
if (a % 2) {
m[(3 * a + 1) / 2] = j;
a = (3 * a + 1) / 2;
}
else {
m[a / 2] = j;
a /= 2;
}
j++;
}
}
vector<int> target;
for (i = 0; i < vec.size(); i++) {
if (m.find(vec[i]) == m.end()) {
target.push_back(vec[i]);
}
}
sort(target.begin(), target.end(), compare);
i = 0;
while (i != target.size()) {
cout << target[i];
if (i != target.size() - 1) cout << " ";
i++;
}
cout << endl;
}
int main()
{
vector<int> vec;//6,7
int n, i;
cin >> n;
for (i = 0; i < n; i++) {
int a;
cin >> a;
vec.push_back(a);
}
function(vec);
return 0;
}
思路很简单,就是把所有被覆盖了的数放在map里,然后在map中查找vec[i],若没找到则vec[i]是“关键数字”。需要注意的是while(a
!= 1),因为比如a=3时我们必须分别验证5((3*3+1)/2),8((5*3+1)/2),4(8/2),2(4/2),1(2/2)。
PATbasic1005
最新推荐文章于 2025-11-09 16:26:35 发布
1446

被折叠的 条评论
为什么被折叠?



