为什么这段代码不能通过PAT乙级1005?

#include
#include

int main()
{
int n;
int a;
int t;
int p = 0;
int i = 0, j = 0;
scanf("%d", &n);
a = (int
)calloc(n, sizeof(int));
while(n != i){
scanf("%d", &a[i++]);
}
for( j = 0; j < n - 1; j++)
for(i = 0; i < n - 1 - j; i++)
if(a[i] < a[i + 1])
t = a[i],a[i] = a[i +1], a[i + 1] = t;

for(i = 0; i < n; i++){
    p = a[i];
    //printf("%d",p);
    while(p > 1){
    if(p % 2 == 0){
        p = p / 2;
    }
    else{
    p = p * 3 + 1;
    }
    //printf("%d", p)   ;
for(j = 0; j < n; j++){
        if( p == a[j])
        a[j] = 0; 
    }
}       

}
i = 0;

while(i != n){
if(a[i] != 0)
printf("%d ", a[i]);
i++;
}
printf("\b");
return 0;
}

http://blog.csdn.net/wyxdexyq/article/details/38794637