HDOJ3784 继续xxx定律
2014-02-15 22:52
232 查看
原题链接
标记法。经典题,不需要去重。
附ac代码:
#include <stdio.h>
int a[501], b[501];
int main(){
int n, i, t, j, k;
while(scanf("%d", &n), n){
for(i = 1; i <= n; ++i){
scanf("%d", &a[i]);
b[i] = 0;
}
for(j = 1; j <= n; ++j){
t = a[j];
//for(k = j + 1; k <= n; ++k)
// if(t == a[k]) b[k] = 1;
while(t != 1){
if(t & 1) t = (t * 3 + 1) / 2;
else t /= 2;
for(k = 1; k <= n; ++k)
if(k == j || b[k]) continue;
else if(t == a[k]) b[k] = 1;
}
}
for(k = n, i = 1; k >= 1; --k){
if(b[k]) continue;
if(i) printf("%d", a[k]), i = 0;
else printf(" %d", a[k]);
}
printf("\n");
}
return 0;
}
标记法。经典题,不需要去重。
附ac代码:
#include <stdio.h>
int a[501], b[501];
int main(){
int n, i, t, j, k;
while(scanf("%d", &n), n){
for(i = 1; i <= n; ++i){
scanf("%d", &a[i]);
b[i] = 0;
}
for(j = 1; j <= n; ++j){
t = a[j];
//for(k = j + 1; k <= n; ++k)
// if(t == a[k]) b[k] = 1;
while(t != 1){
if(t & 1) t = (t * 3 + 1) / 2;
else t /= 2;
for(k = 1; k <= n; ++k)
if(k == j || b[k]) continue;
else if(t == a[k]) b[k] = 1;
}
}
for(k = n, i = 1; k >= 1; --k){
if(b[k]) continue;
if(i) printf("%d", a[k]), i = 0;
else printf(" %d", a[k]);
}
printf("\n");
}
return 0;
}
相关文章推荐
- 微软面试100题---将 二叉搜索树 转化成 有序的双向链表
- 浅谈iPhone OS(iOS)架构
- java之SequenceInputStream
- webservice
- linux 下node.js 使用child_process模块的exec方法所遇问题
- 微软面试100题---将 二叉搜索树 转化成 有序的双向链表
- HDOJ3784 继续xxx定律
- Working with nil
- PHP集成支付宝快速实现充值功能
- NVelocity分页
- 谷歌浏览器chrome假死、卡死、经常无反应,火狐firefox闪黑格子的解决办法(显卡/驱动兼容问题)
- 在VS2010中如何添加MSCOMM控件,实现串口通讯
- NVelocity标签设置缓存的解决方案
- C++Primer(第五版)学习笔记
- 怎样花两年时间去面试一个人
- 黄聪:搜索引擎的工作原理系列视频教程1.0
- 黑马程序员——java集合中的ArrayList和LinkedList
- USACO 1.1 Your Ride Is Here (ride)
- ORACLE行转列通用过程
- Netsharp快速入门(之9) 基础档案(工作区3 添加商品菜单,以及在产品中打开商品界面)