1 /*Problem Description 2 当n为3时,我们在验证xxx定律的过程中会得到一个序列,3,5,8,4,2,1,将3称为关键数,5,8,4,2称为覆盖数。 3 现在输入n个数字a[i],根据关键数与覆盖数的理论,我们只需要验证其中部分数就可以确定所有数满足xxx定律,输出输入的n个数中的关键数。 4 如果其中有多个关键数的话按照其输入顺序的逆序输出。 5 Input 6 输入数据包含多个用例,每个用例首先包含一个整数n,然后接下来一行有n个整数a[i],其中: 7 1<=n<=500 8 1<a[i]<=1000 9 Output 10 请计算并输出数组a中包含的关键数,并按照其输入顺序的逆序输出,每个用例输出占一行。 11 Sample Input 12 3 13 3 8 4 14 5 15 3 8 4 7 15 16 5 17 3 8 4 15 7 18 0 19 20 Sample Output 21 3 22 15 7 3 23 7 15 3 */ 24 #include<stdio.h> 25 int main() 26 { 27 int n , s[501] , i , m ,c[501] ,t; 28 while(scanf("%d",&n) != EOF && n) 29 { 30 for(i=0;i<n;i++) 31 { 32 scanf("%d",&s[i]); 33 } 34 for(i=0;i<n;i++) 35 { 36 t=s[i]; 37 if(t==0)continue; 38 while(t != 1) 39 { 40 if(t % 2 == 0) 41 t /= 2; 42 else 43 { 44 t = 3 * t + 1 ; 45 t /= 2; 46 } 47 for(m=0;m<n;m++) 48 { 49 if(t==s[m]) 50 s[m]=0; 51 } 52 } 53 } 54 m=0; 55 for(i=n-1;i>=0;i--) 56 { 57 if(! s[i]) 58 continue; 59 else 60 { 61 c[m]=s[i]; 62 m+=1; 63 } 64 } 65 for(i=0;i<m-1;i++) 66 {printf("%d ",c[i]);} 67 printf("%d\n",c[m-1]); 68 } 69 return 0; 70 }
原文:http://www.cnblogs.com/a604378578/p/3551249.html