在这个题提交的时候出现测试点3 4 段错误,应该是访问越界问题,参考网上一位博主解决段错误,真觉乃神人也,就是在arry[n]的n在变换时候如果n大于题目要求的100,那就不记录,反正也不会从他开始输出,就跳过。
#include<stdio.h>
int main()
{
int b[101]={0};//记录输入的数 0是初始化,-1表示在过程中被覆盖过
int i,n,number;
scanf("%d",&number);
for(i=0;i<number;i++)
{
scanf("%d",&n);
if(b[n]>=0){
b[n]=1;//初始化,出现
while(n!=1)
{
if(n%2)
{
n=(3*n+1)/2;
}
else
{
n/=2;
}
if(n<=100)//过程量超出边界不处理,以后也不会用到
b[n]=-1;//记录出现过
}
}
}
for(i=100;i>=0;i--)//从数组最大值往下遍历,大于0表示没有被覆盖
{
if(b[i]>0){
printf("%d",i);
break;}
}
if(i>0)//后面可能还有没输出的
for(i=i-1;i>=0;i--)
{
if(b[i]>0)
{
printf(" %d",i);
}
}
}