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 }

 

posted @ 2018-01-16 16:59  爱你的笑  阅读(138)  评论(0编辑  收藏  举报