沿用之前的概念,n为奇数则 n=(3*n+1)/2,若n为偶数则 n = n/2;
然后,记录是否被访问过。
#include <bits/stdc++.h>
using namespace std;
const int N = 1e3 + 10;
typedef long long ll;
int n;
int a[N];
map<int,int> mp;
void chk(int x){
while(x != 1){
if(x % 2 == 1){
x = (3 * x + 1)/2;
mp[x]++;
}
else{
x /= 2;
mp[x]++;
}
}
}
int main(){
cin >> n;
for(int i = 0; i < n; i++){
cin >> a[i];
chk(a[i]);
}
sort(a,a + n);
int cnt = 0;
for(int i = n - 1; i >= 0; i--){
if(!mp[a[i]]){
cnt++;
}
}
int ans = 0;
for(int i = n - 1; i >= 0; i--){
if(!mp[a[i]]){
cout << a[i];
ans++;
if(ans != cnt){
cout <<" ";
}
}
}
return 0;
}