http://ac.jobdu.com/problem.php?pid=1033
如果题目不适用hash,时间复杂度会较高。并且使用栈,倒序输出。
// 浙大09机试
// 继续某某定律
// RE:数组开的不够大,虽然提交显示只使用了1M多,
// RE的话,还是先改大数组,在考虑其他原因
#include <stdio.h>
#include <string.h>
#define SIZE 500+5
#define MAXSIZE 200000
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("E:\\in.txt", "r", stdin);
#endif
int n;
while(scanf("%d", &n)!= EOF && n)
{
int a[SIZE];
bool visited[MAXSIZE];
int stack[SIZE];
int i;
memset(visited, false, sizeof(visited));
for(i=0; i<n; i++)
{
scanf("%d", &a[i]);
int t =a[i];
while(1 != t)
{
if(t%2 == 0)
{
t = t/2;
visited[t] = true;
}
else
{
t = (3*t +1)/2;
visited[t] = true;
}
}
}
int top=0;
for(i=0; i<n; i++)
{
if(false == visited[a[i]])
{
stack[top++] = a[i];
}
}
while(--top>=0)
{
printf("%d", stack[top]);
if(top>0)
{
printf(" ");
}
else
{
printf("\n");
}
}
}
return 0;
}