ACM继续XXX定律
- 题目描述:
-
当n为3时,我们在验证xxx定律的过程中会得到一个序列,3,5,8,4,2,1,将3称为关键数,5,8,4,2称为覆盖数。现在输入n个数字a[i],根据关键数与覆盖数的理论,我们只需要验证其中部分数就可以确定所有数满足xxx定律,输出输入的n个数中的关键数。如果其中有多个关键数的话按照其输入顺序的逆序输出。
- 输入:
-
输入数据包含多个用例,每个用例首先包含一个整数n,然后接下来一行有n个整数a[i],其中: 1<=n<=500, 1<a[i]<=1000
- 输出:
-
请计算并输出数组a中包含的关键数,并按照其输入顺序的逆序输出,每个用例输出占一行。
- 样例输入:
-
3 3 8 4 5 3 8 4 7 15 5 3 8 4 15 7 0
- 样例输出:
-
3 15 7 3 7 15 3
main.cpp1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 5 void get_xxx(int x, int xxx[]); 6 7 int main() 8 { 9 int xxx[400005], a[505]; 10 int n,i,check; 11 while(cin>>n && n>0) { 12 for(i=0; i<n; i++) cin>>a[i]; 13 memset(xxx, 0, sizeof(xxx)); 14 for(i=0; i<n; i++) 15 get_xxx(a[i],xxx); 16 check=1; 17 for(i=n-1; i>=0; i--) 18 if(xxx[a[i]] == 0) { 19 if(check==1) cout<<a[i]; 20 else cout<<" "<<a[i]; 21 check=0; 22 } 23 cout<<endl; 24 } 25 return 0; 26 } 27 28 void get_xxx(int x, int xxx[]) { 29 if(x==1) return ; 30 if(x%2==1) 31 x = (3*x+1)/2 ; 32 else 33 x/=2; 34 xxx[x]=1; 35 get_xxx(x, xxx); 36 }
posted on 2013-03-11 19:55 Zachary_wiz 阅读(236) 评论(0) 编辑 收藏 举报