#include<stdio.h>
int max(int b[], int len)
{
int maxid = 0;
for (int i=1; i<len; i++)
{
if(b[i]<b[maxid])
{
maxid=i;
}
}
return maxid;
}int main()
{
int K;
scanf("%d", &K);
int a[K],b[K];
for(int i=0; i<K; i++){
scanf("%d", &a[i]);
}
for(int i=0;i<K;i++){
b[i]=a[i];
}for(int i=0;i<K;i++){
do{
if(a[i]%2==0){
a[i]/=2;
for(int p=0;p<K;p++){
if(b[p]==a[i]){
b[p]=0;
}
}
} else {
a[i]=(a[i]*3+1)/2;
for(int q=0;q<K;q++){
if(b[q]==a[i]){
b[q]=0;
}
}
}
} while(a[i]!=1);
}
int len=sizeof(b)/sizeof(b[0]);
for (int i=len-1; i>0; i--)
{
int maxid = max(b, i+1);
int t = b[maxid];
b[maxid] = b[i];
b[i] = t;
}
for(int i=0; i<len&&b[i]!=0; i++) {
printf("%d", b[i]);
if(b[i+1]!=0){
printf(" ");
}
}
return 0;
}
从a[0]开始算(3n+1)猜想,算出来的每一个与数组b作比较,如果相等,令b[i]=0,直到a[i]=1,继续下一个a[i],最后选择排序,从大到小输出不为0的b[i]。