九度OJ 题目1033:继续xxx定律
2015-08-06 21:53
239 查看
一题目描述:
当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
二.题目分析
利用布尔数组记录关键数或者覆盖数,题中求解的是整个数组的关键数,因此数组中的每个数都要判断。
三.代码
当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 <stdio.h> #include <stdlib.h> #define MAX 1010 int key[MAX]; int main() { int n,a[1000],i,temp,flag=1; while(1) { scanf("%d",&n); if(n==0) break; for(i=0;i<n;i++) scanf("%d",&a[i]); for(i=0;i<MAX;i++) key[i]=0; for(i=0;i<n;i++) { temp=a[i]; while(temp!=1) { if(temp%2==0) { temp /=2; key[temp]=1; } else temp=temp*3+1; } } flag=1; for(i=n-1;i>=0;i--) { if(flag&&!key[a[i]]) { printf("%d",a[i]); flag=0; } else if(!key[a[i]]) printf(" %d",a[i]); } printf("\n"); } return 0; }
相关文章推荐
- 计算机网络入门教程
- 1242 Rescue【bfs】
- JNDI配置c3p0连接池
- MySQL中的数据类型
- 第二章 图形界面还是命令窗口
- Sublime配置python开发环境
- Qt的学习记录卡
- 【瞎搞】 HDU 5358 First One
- 【android】利用getViewTreeObserver().addOnGlobalLayoutListener()获得一个视图的高度
- HDOJ题目4417 Super Mario(划分树求区间比k小的个数+二分)
- 范师兄的面经
- 函数实现不放在头文件的原因,及何时可以放头文件的情况
- mysql 使用
- iOS设计模式之命令模式
- [科研小记]
- JS和C语言判断闰年
- PPT投影仪演示设置
- iOS 透明视图控制器
- Android之Notification的推荐用法
- 第一章 关于linux的历史