思路:
把每个数,记录下递推过程中遇到的每一个数(除自己外),从大到小看,哪些数未被标记,就是关键数。
代码实现:
#include <bits/stdc++.h>
using namespace std;
int n;
map<int, int> mp;//懒得考虑边界了,直接用map了
void f(int x)
{
while (x != 1)
{
if (x & 1)
x = x * 3 + 1;
x /= 2;
if (mp[x])
break;
mp[x] = 1;
}
}
int main()
{
cin >> n;
vector<int> v(n);
for (auto &c : v)
{
cin >> c;
if (!mp[c])
f(c);
}
sort(v.begin(), v.end());
bool t = 0;
for (int i = n - 1; i >= 0; i--)
{
if (!mp[v[i]])
{
if (t)
cout << " ";
cout << v[i];
t = 1;
}
}
return 0;
}