http://acm.hdu.edu.cn/showproblem.php?pid=3784
#include <stdio.h>
#include <string.h>
bool visit[1000001]; //中间可能有很大的数
int b[501];
int main()
{
int n,i;
while (scanf("%d",&n)!=EOF&&n!=0)
{
memset(visit,0,sizeof(visit));
memset(b,0,sizeof(b));
for (i=1;i<=n;i++)
{
int x;
scanf("%d",&x);
b[i]=x;
while (x!=1)
{
if (x%2==0)
{
x/=2;
}
else
{
x=(x*3+1)/2;
}
visit[x]=true; //出现在序列里,标记访问过
}
}
int flag=0;
for (i=n;i>=1;i--)
{
if ( !visit[ b[i] ])
{
if (flag)
{
printf(" ");
}
printf("%d",b[i]);
flag=1;
}
}
printf("\n");
}
return 0;
}