1005. 继续(3n+1)猜想 (25)
#include<stdio.h>
main()
{
int dep[9999]={0},Pan[9999]={0};
int n,i,c,cnt=0,temp,j;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&Pan[i]);
dep[Pan[i]]=Pan[i];
}
for(i=0;i<n;i++)
{
if(dep[Pan[i]]==0)continue;
else
{
c=Pan[i];
while(c!=1 && c)
{
if(c%2==0)
{
c=c/2;
dep[c]=0;
}else{
c=3*c+1;
c=c/2;
dep[c]=0;
}
}
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(Pan[j]<Pan[i])
{
temp=Pan[i];
Pan[i]=Pan[j];
Pan[j]=temp;
}
}
}
for(i=0;i<n;i++)
{
if(dep[Pan[i]]==0)continue;
else
{
if(cnt!=0)printf(" ");
printf("%d",dep[Pan[i]]);
cnt++;
}
}
}
……别问我为什么定义数组那么大,因为为了简化代码(突发奇想的算法),一开始编译没考虑那么多,定义成100,但是编译后会发生段错误,所以用输出每次的c后发现如果数据是97,最大值可以达到3000多,所以直接设置数组为9999,有点投机取巧的意思吧。。如果这道题再大点,就不好办了.