int main()
{
int n;
scanf("%d",&n);
int a[n];
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
int max=a[0];
for(int i=1;i<n;i++)
{
if(max<a[i])
max=a[i];
}
int b[max];
for(int i=0;i<max+1;i++)
{
b[i]=1;
}
for(int i=0;i<n;i++)
{
int m=a[i];
while(m!=1)
{
if(m%2==0)
{
m=m/2;
if(m<=max) b[m]=0;
}
else
{
m=3*m+1;
m=m/2;
if(m<=max)b[m]=0;
}
}
}
int t=0;
for(int i=0;i<n;i++)
{
if(b[a[i]]==0)a[i]=-1;
else t++;
}
int mn,j,p,w=1;
for(int i=0;i<t;i++)
{
mn=a[0];
for( j=1;j<n;j++)
{
if(a[j]>mn)
{
mn=a[j];
p=j;}
}
if(w==1)
{
printf("%d",mn);
w=0;
}
else printf(" %d",mn);
a[p]=-1;
}
printf("\n");
return 0;
}
https://blog.csdn.net/weixin_38663654/article/details/102692140
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
bool cmp(int a,int b) {
return a>b;
}
int main() {
vector<int> a(101,0);
int n;
cin>>n;
vector<int> arr(n);
for(int i=0; i<n; i++) {
int p;
cin>>p;
arr[i]=p;
if(!a[p])
while(p!=1) {
int q;
if(p%2)
q=(3*p+1)/2;
else
q=p/2;
if(q<=100){
if(a[q])
break;
a[q]=1;
}
p=q;
}
}
vector<int> A;
for(int i=0; i<n; i++)
if(!a[arr[i]])
A.push_back(arr[i]);
sort(A.begin(),A.end(),cmp);
for(int i=0; i<A.size(); i++)
cout<<A[i]<<(i!=A.size()-1?" ":"");
return 0;
}