题目地址:http://jobdu.sinaapp.com/problem.php?pid=1033
给的数据中 有重复的值
比如:
3
5 3 3
还得重复输出 把重复去掉都不对。推恶心。。。
C语言源码:
#include<stdio.h>
#define maxsize 900000
int mark[maxsize];
int main()
{
int n,i,a[501],stack[501],top,j;
scanf("%d",&n);
while(n)
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<maxsize;i++)
mark[i]=0;
mark[1]=-1;
top=0;
for(i=0;i<n;i++)
{
if(mark[a[i]]>0)
{
stack[top++]=a[i];
mark[a[i]]++;
}
if(mark[a[i]]==0)
{
mark[a[i]]=1;
stack[top++]=a[i];
if(a[i]%2==0)
a[i]/=2;
else
a[i]=(3*a[i]+1)/2;
while(mark[a[i]]>=0)
{
mark[a[i]]=-1;
if(a[i]%2==0)
a[i]/=2;
else
a[i]=(3*a[i]+1)/2;
}
}
}
j=0;
while(j<top&&mark[stack[j]]<=0)
j++;
for(i=top-1;i>j;i--)
{
if(mark[stack[i]]>0)
printf("%d ",stack[i]);
}
printf("%d\n",stack[i]);
scanf("%d",&n);
}
}