pat上1005为什么部分正确

#include
using namespace std;
int main()
{
int k,n,a[100],i=0,j,b=0;

cin>>k;
for(i=0;i<k;i++)
    cin>>a[i];
i=0;
while(i<k){
n=a[i];
while(n!=1)
    {

    if(n%2==1)
        n=(3*n+1)/2;
    else
        n=n/2;
    for(j=0;j<i;j++)
        if(a[j]==n)
        {
            for(j;j<k;j++)
                a[j]=a[j+1];
            k--;
            b++;
        }
    for(j=i+1;j<k;j++)
        if(a[j]==n)
        {
            for(j;j<k;j++)
                a[j]=a[j+1];
            k--;
            }
        }

i=i+1-b;
b=0;
}
for(i=0;i<k;i++) 
    for( j=1;j<k;j++)
        if(a[j]>a[i]) 
        {
            int temp;
            temp=a[i];
            a[i]=a[j];
            a[j]=temp;
        }
for(i=0;i<k-1;i++)
    cout<<a[i]<<" ";
cout<<a[k-1]<<endl;

return 0;
}

http://blog.csdn.net/sup_heaven/article/details/8451663