PTA乙级题 1005. 继续(3n+1)猜想 (25)

【题目链接】


#include<stdio.h> 
#include<string.h> 
int main()  
{  
  int a[100];  
  int b[100][100];  
  int i,j,k,n,q;  
  memset(b,0,sizeof(b));  
  scanf("%d\n",&n);  
  for(i=0;i<n;i++)  
  {  
    scanf("%d",&a[i]);  
  }  
  for(i=0;i<n;i++)  
  {  
    k=a[i];  
    j=0;  
    while(k!=1)  
    {  
      if(k%2==0)  
        k=k/2;  
      else  
        k=(3*k+1)/2;  
      b[i][j]=k;  
      j++;  
    }  
  }  
  for(i=0;i<n;i++)  
  {  
    for(j=0;b[i][j]!=0;j++)  
    {  
      for(q=0;q<n;q++)  
      if(a[q]==b[i][j])  
        a[q]=0;  
    }  
  }  
  for(i=0;i<n-1;i++)  
    for(j=i;j<n;j++)  
      if(a[i]<a[j])  
      {  
        int temp;  
        temp=a[i];  
        a[i]=a[j];  
        a[j]=temp;  
      }  
  for(i=0;i<n-1;i++)  
    for(j=i;j<n;j++)  
    {  
      if(a[i]==0&&a[j]!=0)  
      {  
        a[i]=a[j];  
        a[j]=0;  
      }  
    }  
    q=0;  
    for(i=0;i<n;i++)  
      if(a[i]>0)  
        q++;  
  for(i=0;i<q-1;i++)  
    if(a[i]>0)  
      printf("%d ",a[i]);  
    printf("%d",a[q-1]);  
    return 0;  
}