#include<stdio.h> struct mlc { int s; int q; }a[1000]; int main() { int n,i,j,z,m,h; int b[1000]; while(~scanf("%d",&n)) { for(i=0;i<n;i++) a[i].q=1; for(i=0;i<n;i++) { scanf("%d",&a[i].s); } i=0; for(j=0;j<n;j++) { m=a[i].s; while(m!=1) { if(m%2==0) { m=m/2; for(z=0;z<n;z++) { if(a[z].s == m) { a[z].q = -1; } } } else { m=(m*3+1)/2; for(z=0;z<n;z++) { if(a[z].s == m) { a[z].q = -1; } } } } i++; } i=0;j=0;z=0; for(i=0;i<n;i++) { if(a[i].q!=-1) { b[z]=a[i].s; z++; } } for(i=0;i<z-1;i++) for(j=i;j<z;j++) { if(b[i]<b[j]) { h=b[i]; b[i]=b[j]; b[j]=h; } } for(i=0;i<z;i++) { if(i!=z-1) printf("%d ",b[i]); else printf("%d\n",b[i]); } } return 0; }
用结构体定义一个w;先给n赋初值1;然后跟前面一样用循环计算其值,不同的是在循环里再加一个循环,对于每个改变的n均判断后面的数组内有没有一样的数,如果一样就使它的w变为0;所有判断完毕后,将那些w=1的取到另一个数组内,再进行冒泡排序,最后将它输出