答案
#include <iostream>
#include<cstdio>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
const int N = 1e4;
bool b[N];
int a[105];
vector<int> ans;
int main()
{
int n; cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a[i];
int x = a[i];
while (x != 1)
{
if (x & 1)x = x * 3 + 1, x /= 2;
else x /= 2;
b[x] = true;
}
}
for (int i = 0; i < n; i++)if (!b[a[i]]) ans.push_back(a[i]);
sort(ans.begin(), ans.end());
for (int i = ans.size() - 1; i > 0; i--) cout << ans[i] << " ";
cout << ans[0];
return 0;
}
tips:
1,被覆盖的数,即多次反复计算后出现的所有数需要记录下来,用bool数组
2,但并不是记录的所有数都需要,只要判断所给的数有没有出现即可,没有出现就要存下来,放在动态数组更好
3,x&1
如果是奇数得1
偶数得0