1005. 继续(3n+1)猜想 (25)
题目链接:https://www.patest.cn/contests/pat-b-practise/1005
1 #include<stdio.h> //注意输出格式 2 int judge(int a,int N) //a 是否被N所覆盖 3 { 4 while(N>1) 5 { 6 if(N%2) 7 { 8 N=(3*N+1)/2; 9 if(N==a)break; 10 } 11 else 12 { 13 N=N/2; 14 if(N==a)break; 15 } 16 } 17 if(N==1)return 0; 18 else return 1; 19 } 20 int main() 21 { 22 int K,a[100],b[100],s=0; 23 scanf("%d",&K); 24 for(int i=0;i<K;i++) scanf("%d",&a[i]); 25 for(int i=0;i<K;i++) 26 { 27 int j=0; 28 for(int m=0;m<K;m++) 29 { 30 if(a[i]>0&&a[m]>0&&m!=i&&judge(a[i],a[m])) //如果a[i]被其他数覆盖 ,将其置为0 31 { 32 a[i]=0; 33 j++; 34 break; 35 } 36 } 37 if(j==0) //未被覆盖 ,个数加一 38 { 39 b[s]=a[i]; 40 s++; 41 } 42 } 43 for(int i=0;i<s;i++) //排序 44 { 45 for(int k=i+1;k<s;k++) 46 { 47 if(b[i]<b[k]) 48 { 49 int x; 50 x=b[i],b[i]=b[k],b[k]=x; 51 } 52 } 53 printf("%d",b[i]); 54 if(i<s-1)printf(" "); //格式控制,不是最后一个输出空格 55 } 56 printf("\n"); 57 return 0; 58 }