九度1033:继续xxx定律
2017-06-08 20:43
288 查看
题目描述:
当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中包含的关键数,并按照其输入顺序的逆序输出,每个用例输出占一行。
样例输入:
样例输出:
当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
#include<iostream> #include<cstring> #include<cstdio> #include<queue> #include<map> #include<algorithm> #include<cmath> using namespace std; int main(){ int n; while(cin>>n&&n){ int a[100000+10]={0}; int fz[100000+10]={0}; for(int i=0;i<n;i++) { int num; scanf("%d",&a[i]); fz[a[i]]=1; } for(int i=0;i<n;i++){ int num=a[i]; while(num!=1){ if(num%2==0) { num/=2; if(fz[num]==1) fz[num]=-1; } else { num=(3*num+1)/2; if(fz[num]==1) fz[num]=-1; } } } int i; for( i=n-1;i>=0;i--) if(fz[a[i]]==1) { cout<<a[i]; break; } i--; for( ;i>=0;i--) if(fz[a[i]]==1) { cout<<" "<<a[i]; } cout<<endl; } return 0; }
相关文章推荐
- 九度OJ 1033:继续xxx定律 (基础题)
- 九度OJ 题目1033:继续xxx定律
- 九度OJ 题目1033:继续xxx定律
- 九度OJ 1033:继续xxx定律 (基础题)
- 九度oj 题目1033:继续xxx定律 ZOJ 【ZJU2009考研机试题3】
- 题目1033:继续xxx定律
- 题目1033:继续xxx定律
- 题目1033:继续xxx定律
- 题目1033:继续xxx定律
- 1033.继续XXX定律
- 九度oj 1031 XXX定律
- HDU-3784继续xxx定律
- 九度 OJ 1031:xxx定律
- hdu 3874 继续xxx定律
- 九度[1033]-继续xxx定律
- java 杭电3784继续xxx定律 栈的使用
- 杭电3784(继续xxx定律)
- zju2009_继续xxx定律
- HDU 3784 继续xxx定律
- 九度OJ 1031 xxx定律