九度:1033<继续3n+1>

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值