#include<stdio.h>
int main()
{
int index;
int n;
int a[101];
scanf("%d",&n);
for (int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(int i=0;i<n;i++)
{
index=a[i];
while(index!=2&&index!=0)
//没有数可以被2覆盖,而且2也带进去循环的话,就没有终止了(2/2=1 (1*3+1)/2=2)
//等于0的话,这个数就是已经被覆盖的了,没必要再做循环。
{
if(index%2==0)
{
index=index/2;
}
else
{
index=(index*3+1)/2;
}
for(int j=0;j<n;j++)
//将a[101]中的数字一个个的与已经出现的数字比较 ,已经出现过的话则变为0
{
if (a[j]==index)
{
a[j]=0;
}
}
}
}
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if(a[i]<a[j])
{
index=a[j];
a[j]=a[i];
a[i]=index;
}
}
}
for(int i=0;i<n;i++)
{
if(a[i]!=0)
{
printf("%d",a[i]);
if(a[i+1]!=0)
{
printf(" ");
}
}
}
return 0;
}
这个的重点我觉得在于要能想到那个挨个比较的循环,还有那个用一个变量代替a[]中的数字进行循环的思维,一开始自己想了很多方法都没用,最后还是看了别人的思路才能写出来,加油!