#include<bits/stdc++.h>
using namespace std;
int main(){
int n,num,hash[5000]={
0};
cin>>n;
int a[n]={
0};
for(int i=0;i<n;i++){
cin>>a[i];
num=a[i];
while(num>1){
if(num%2==0)
num/=2;
else
num=(3*num+1)/2;
++hash[num];
}
}
sort(a,a+n);
for(int flag=0,i=n-1;i>=0;--i){
if(hash[a[i]]==0){
if(flag)
cout<<" ";
cout<<a[i];
flag=1;
}
}
}
HashTable详解
#include<bits/stdc++.h>
using namespace std;
bool cmp(int a,int b){
return a>b;
}
int HashTable[10000]={
};
int main(){
int n;cin>>n;
int arr[n];
for(int i=0;i<n;i++){
int t;
cin>>t;
arr[i]=t;
while(t!=1){
if(t%2==0)
t/=2;
else
t=(3*t+1)/2;
HashTable[t]++;
}
}
sort(arr,arr+n,cmp);
int temp[n];
int t_num=0;
for(int i=0;i<n;i++){
if(HashTable[arr[i]]==0){
temp[t_num++]=arr[i];
}
}
for(int i=0;i<t_num;i++){
cout<<temp[i];
if(i!=t_num-1)
cout<<" ";
}
return 0;
}