题目描述
任意给定一个正整数N,
如果是偶数,执行: N / 2
如果是奇数,执行: N * 3 + 1

生成的新的数字再执行同样的动作,循环往复。

通过观察发现,这个数字会一会儿上升到很高,
一会儿又降落下来。
就这样起起落落的,但最终必会落到“1”
这有点像小冰雹粒子在冰雹云中翻滚增长的样子。

比如N=9
9,28,14,7,22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1
可以看到,N=9的时候,这个“小冰雹”最高冲到了52这个高度。
输入
一个正整数N(N<1000000)
输出
一个正整数,表示不大于N的数字,经过冰雹数变换过程中,最高冲到了多少。
样例输入
10
样例输出
52
思路:在dotcpp上,就算是不暴力也一样可以过,但是总感觉不是很对。时间还是有点多。
我的做法是暴力打表,保存1-1000000的值。
代码如下:

#include<bits/stdc++.h>
#define ll long long
using namespace std;const int maxx=1e6+100;
map<ll,ll> dp;
int n;inline ll dfs(ll u)
{if(dp[u]!=0) return dp[u];if(u==1) return dp[u]=1ll;ll _max;if(u&1) _max=u*3ll+1ll;else _max=u/2ll;_max=max(_max,dfs(_max));return dp[u]=_max;
}
int main()
{scanf("%d",&n);ll _max=0;freopen("out.txt","w",stdout);for(int i=1;i<=n;i++) {_max=max(dfs((ll)i),_max);printf("%lld ",_max);}return 0;
}

打表如图:

我门可以发现很多重复的。
那么我们把所有重复的区间找出来就可以O(1)查询了。
代码如下:

#include<bits/stdc++.h>
#define ll long long
using namespace std;const int maxx=1e6+100;
map<ll,ll> dp;
int n;int main()
{ll _max=0;freopen("out.txt","r",stdin);ll l=1,r,x;ll pre=1;for(ll i=1;i<=1000000;i++) {scanf("%lld",&x);if(i==0) continue;if(x==pre) r=i;else{printf("else if(n>=%lld&&n<=%lld) cout<<%lldll<<endl;\n",l,r,pre);pre=x,l=r=i;}}printf("else if(n>=%lld&&n<=%lld) cout<<%lldll<<endl;",l,r,pre);return 0;
}

最后就是正式代码了:

#include<bits/stdc++.h>
#define ll long long
using namespace std;ll n;int main()
{scanf("%d",&n);if(n>=1&&n<=2) cout<<1ll<<endl;else if(n>=3&&n<=6) cout<<16ll<<endl;else if(n>=7&&n<=14) cout<<52ll<<endl;else if(n>=15&&n<=26) cout<<160ll<<endl;else if(n>=27&&n<=254) cout<<9232ll<<endl;else if(n>=255&&n<=446) cout<<13120ll<<endl;else if(n>=447&&n<=638) cout<<39364ll<<endl;else if(n>=639&&n<=702) cout<<41524ll<<endl;else if(n>=703&&n<=1818) cout<<250504ll<<endl;else if(n>=1819&&n<=4254) cout<<1276936ll<<endl;else if(n>=4255&&n<=4590) cout<<6810136ll<<endl;else if(n>=4591&&n<=9662) cout<<8153620ll<<endl;else if(n>=9663&&n<=20894) cout<<27114424ll<<endl;else if(n>=20895&&n<=26622) cout<<50143264ll<<endl;else if(n>=26623&&n<=31910) cout<<106358020ll<<endl;else if(n>=31911&&n<=60974) cout<<121012864ll<<endl;else if(n>=60975&&n<=77670) cout<<593279152ll<<endl;else if(n>=77671&&n<=113382) cout<<1570824736ll<<endl;else if(n>=113383&&n<=138366) cout<<2482111348ll<<endl;else if(n>=138367&&n<=159486) cout<<2798323360ll<<endl;else if(n>=159487&&n<=270270) cout<<17202377752ll<<endl;else if(n>=270271&&n<=665214) cout<<24648077896ll<<endl;else if(n>=665215&&n<=704510) cout<<52483285312ll<<endl;else if(n>=704511&&n<=1000000) cout<<56991483520ll<<endl;return 0;
}

虽然暴力可以过,但是更正规一点的比赛应该不会出现数据水的情况,所以还是需要更准确一点的。
努力加油a啊,(o)/~

[蓝桥杯][2016年第七届真题]冰雹数(暴力打表找规律)相关推荐

  1. [蓝桥杯][2016年第七届真题]压缩变换(主席树求区间不同数的个数)

    题目描述 小明最近在研究压缩算法. 他知道,压缩的时候如果能够使得数值很小,就能通过熵编码得到较高的压缩比. 然而,要使数值很小是一个挑战. 最近,小明需要压缩一些正整数的序列,这些序列的特点是,后面 ...

  2. [蓝桥杯][2016年第七届真题]密码脱落(记忆化搜索)

    题目描述 X星球的考古学家发现了一批古代留下来的密码. 这些密码是由A.B.C.D 四种植物的种子串成的序列. 仔细分析发现,这些密码串当初应该是前后对称的(也就是我们说的镜像串). 由于年代久远,其 ...

  3. 蓝桥杯2016年第七届真题——四平方和

    四平方和 一.题目内容 题目描述 四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多4个正整数的平方和,如果把0包括进去,就正好可以表示为4个数的平方和.比如:5 = 0^2 + 0^2 + ...

  4. 蓝桥杯2016年第七届真题-路径之谜

    题目描述 小明冒充X星球的骑士,进入了一个奇怪的城堡. 城堡里边什么都没有,只有方形石头铺成的地面. 假设城堡地面是 n x n 个方格.[如图1.png]所示. 按习俗,骑士要从西北角走到东南角. ...

  5. 问题 1825: [蓝桥杯][2015年第六届真题]穿越雷区

    问题 1825: [蓝桥杯][2015年第六届真题]穿越雷区 时间限制: 1Sec 内存限制: 128MB 提交: 310 解决: 211 题目描述 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区 ...

  6. [蓝桥杯][2019年第十届真题]扫地机器人(二分+贪心)

    题目描述 小明公司的办公区有一条长长的走廊,由 N 个方格区域组成,如下图所 示. 走廊内部署了 K 台扫地机器人,其中第 i 台在第 Ai 个方格区域中. 已知扫地机器人每分钟可以移动到左右相邻的方 ...

  7. [蓝桥杯][2015年第六届真题]生命之树(树形dp)

    题目描述 在X森林里,上帝创建了生命之树. 他给每棵树的每个节点(叶子也称为一个节点)上,都标了一个整数,代表这个点的和谐值. 上帝要在这棵树内选出一个非空节点集S,使得对于S中的任意两个点a,b,都 ...

  8. [蓝桥杯][2015年第六届真题]密文搜索(排序+二分)

    题目描述 福尔摩斯从X星收到一份资料,全部是小写字母组成. 他的助手提供了另一份资料:许多长度为8的密码列表. 福尔摩斯发现,这些密码是被打乱后隐藏在先前那份资料中的. 请你编写一个程序,从第一份资料 ...

  9. [蓝桥杯][2019年第十届真题]糖果(状压dp)

    题目描述 糖果店的老板一共有 M 种口味的糖果出售.为了方便描述,我们将 M 种 口味编号 1 ∼ M. 小明希望能品尝到所有口味的糖果.遗憾的是老板并不单独出售糖果,而 是 K 颗一包整包出售. 幸 ...

最新文章

  1. CC2540获取本机MAC地址
  2. 大橙子_一颗橙子多甜多大,想要甜的还是酸的 您说了算
  3. 计算机科学与技术毕业答辩流程,计算机科学与技术学院毕业答辩工作细则
  4. Golang入门(4):并发
  5. tomcat 查看当前请求数_原生线程池这么强大,Tomcat 为何还需扩展线程池?
  6. Spring-bean的作用域(六)
  7. TypeScript:语句
  8. Atitit.编程语言的主要的种类and趋势 逻辑式语言..函数式语言...命令式语言
  9. html返回顶部函数,网页中返回顶部代码(多种方法)另附注释说明
  10. lambda表达式(Shawn),android物联网开发配套代码
  11. Eclipse中source folder、folder、package的区别?
  12. 亚马逊服务器443端口开放配置aws
  13. 关于OLAP数仓,这大概是史上最全面的总结!(万字干货)
  14. [unity3d] iTween文档解析(2) (iTween方法和属性)
  15. 相亲APP源码开发搭建应用场景及解决方案
  16. talib.APO绝对价格振荡器指标详解
  17. 【Ubuntu】虚拟摄像头,并应用在Teams上
  18. 5G+智慧采矿应用概况
  19. matlab上机实习报告,matlab上机实习报告.doc
  20. 网络编程四-原生JDK的NIO及其应用

热门文章

  1. java 上传 进度条_Ajax上传文件并显示进度条
  2. mysql怎么创建自动作业_mysql 让一个存储过程定时作业的代码
  3. 论文阅读:SSD: Single Shot MultiBox Detector
  4. mysql表变量临时表_sql server 临时表详细讲解及简单示例
  5. 导出来的双引号怎么处理_阿里巴巴国际站图片处理小技巧
  6. java 根据经纬度计算多边形的面积_强基初中数学amp;学Python——第二十九课 根据海伦秦九韶公式编程计算三角形面积...
  7. python 二分类的实例_keras分类之二分类实例(Cat and dog)
  8. 获取某个输入框的字符长度_收藏,最全的字符串函数方法,总有你用到的~
  9. SpringBoot+SpringCache+Redis补充
  10. 【JAVA基础】四舍五入之7中舍入法