刷PAT题时,提交后提示段错误,但程序运行没有问题。代码如下:
求大神指点
#include <iostream>
using namespace std;
int main()
{int n,counter,i,j,k;
int a,b,m,t;//冒泡排序用参数
k=0;
int test[100]={0};//存放n个待验证卡拉兹猜想的数
int outall[100]={0};//逐个存放各输入数字,验证卡拉兹猜想时所产生的数
int endout[100]={0};//存储各个关键字
int test0[100]={0};//用于存储test[i]的初始值
cin >> n;
if(n<=0||n>100) return 0;
for(i=0;i<n;i++)
{cin >>test[i];test0[i]=test[i];}
counter=0;//初始化outall数组下标
for(i=0;i<n;i++)
while(test[i]!=1&&test[i]!=0)
{if(test[i]%2==0)
{test[i]=test[i]/2;if(test[i]!=1){counter=counter+1;outall[counter]=test[i];}
else i+=1;}//避免将1计入,说明输入的某一待验证数所已验证完毕
else
{test[i]=(3*test[i]+1)/2;counter++;outall[counter]=test[i];}//注意,此处各个test[i]均已发生变化,变为1
}
/*接下来需进行test[i]与卡拉兹猜想所产生数字之间的比较,已确定哪个是关键字*/
for(i=0;i<n;i++)
for(j=1;j<=counter;j++)//此处的n已随上面的n发生变化,变为1
{if(test0[i]==outall[j])test0[i]=-1;}//加上{}避免了崩溃
/***********/
/* for(i=0;i<n;i++)
cout<< test0[i]<<endl;*///此处已完成关键字筛选,非关键字变为-1
for(i=0;i<n;i++)
if(test0[i]!=-1){endout[k]=test0[i];k++;}//筛选出关键字,k表示共有k个关键字
/************************以下为冒泡排序对endout[k]进行从大到小排序*****************/
//k=k-1;
m=k;
t=0;
while(m>t)
{ for(i=t;i<m-1;i++)
{ if(endout[i]<endout[i+1]){a=endout[i];endout[i]=endout[i+1];endout[i+1]=a;}}//最小的沉到底
m--;//排好序的已不需要再进行比较
for(i=m;i>t+1;i--)
{if(endout[i]>endout[i-1]){b=endout[i];endout[i]=endout[i-1];endout[i-1]=b;}}//最大的浮到最上面
t++;}
for(i=0;i<k-1;i++)
cout<<endout[i]<<" ";
cout<<endout[k-1];
}