继续xxx定律
来源:互联网 发布:长整型数据范围 编辑:程序博客网 时间:2024/06/18 11:37
继续xxx定律
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3071 Accepted Submission(s): 885
Problem Description
当n为3时,我们在验证xxx定律的过程中会得到一个序列,3,5,8,4,2,1,将3称为关键数,5,8,4,2称为覆盖数。现在输入n个数字a[i],根据关键数与覆盖数的理论,我们只需要验证其中部分数就可以确定所有数满足xxx定律,输出输入的n个数中的关键数。如果其中有多个关键数的话按照其输入顺序的逆序输出。
Input
输入数据包含多个用例,每个用例首先包含一个整数n,然后接下来一行有n个整数a[i],其中:
1<=n<=500
1<a[i]<=1000
1<=n<=500
1<a[i]<=1000
Output
请计算并输出数组a中包含的关键数,并按照其输入顺序的逆序输出,每个用例输出占一行。
Sample Input
33 8 453 8 4 7 1553 8 4 15 70
Sample Output
315 7 37 15 3
解题报告:这道题的背景是xxx定律 。 注意一组数据:
8 4 3
3 8 4
结果都是3。
code:
#include<cstdio>#include<iostream>#include<cstring>#include<string>#include<sstream>#include<algorithm>#include<math.h>#include<queue>#include<stack>#include<map>#include<set>using namespace std;typedef long long ll;const int maxn =1005;int a[maxn],num[maxn];int main(){ // freopen("input.txt","r",stdin); int n; while(~scanf("%d",&n)){ if(!n) break; memset(num,0,sizeof(num)); for(int i=0;i<n;i++) scanf("%d",&a[i]); for(int i=0;i<n;i++){ int b=a[i]; if(num[b]) continue; while(b!=1){ if(b%2==0) b/=2; else b=(b*3+1)/2; if(b<maxn) num[b]=1; } } int flag=0; for(int i=n-1;i>=0;i--){ if(!num[a[i]]){ if(flag) printf(" "); printf("%d",a[i]); flag=1; } } printf("\n"); } return 0;}
1 0
- hdoj3784继续xxx定律
- zju2009_继续xxx定律
- HDU3784:继续xxx定律
- HDOJ3784 继续xxx定律
- 1033.继续XXX定律
- 继续xxx定律
- 继续xxx定律
- 继续xxx定律
- 继续XXX定律
- hdu 3784 继续xxx定律
- HDU-3784继续xxx定律
- 题目1033:继续xxx定律
- hdu-3784-继续XXX定律
- 题目1033:继续xxx定律
- 题目1033:继续xxx定律
- hdu 3874 继续xxx定律
- hdu 3784 继续xxx定律
- 继续xxx定律 hdoj 3784
- 【恒大家装】成功案例
- c/c++实现顺序循环队列和链式队列
- JAVA Swing图形库一些使用心得
- 面试题汇总及解答
- Struts2学习2——Struts配置
- 继续xxx定律
- Android应用安全与防范之数据保护和资源保护
- 排序(冒泡排序、选择排序、插入排序)
- Scala入门03
- isdigit函数
- servlet相关知识,使用servlet实现定时刷新,实现页面登录次数统计
- ubuntu 16.04下创建应用快捷方式(android studio为例)
- 【LeetCode】Candy
- Java collection与map常用集合大总结