hihoCode太阁最新面经算法6——扩展二进制数
2016-06-26 13:42
281 查看
题目描述
我们都知道二进制数的每一位可以是0或1。有一天小Hi突发奇想:如果允许使用数字2会发生什么事情?小Hi称其为扩展二进制数,例如(21)ii = 2 * 21 +
1 = 5, (112)ii = 1 * 22 + 1 * 21 +
2 = 8。
很快小Hi意识到在扩展二进制中,每个数的表示方法不是唯一的。例如8还可以有(1000)ii, (200)ii,
(120)ii 三种表示方法。
对于一个给定的十进制数 N ,小Hi希望知道它的扩展二进制表示有几种方法?
一个十进制整数 N。(0 ≤ N ≤ 1000000000)
N的扩展二进制表示数目。
样例输入
样例输出
题目链接:http://hihocoder.com/contest/hihointerview11/problem/2
思路:
个人认为这道题属于递归+分治;
对于正整数N,
首先,考虑其第0位数:
若N为奇数,则第0位必定为 1;
若N为偶数则第0位为 0 或者 2 ;
接着,考虑(N-第0位)/ 2 可能的方案数,采取对第0位一样的做法。。。
代码如下:
我们都知道二进制数的每一位可以是0或1。有一天小Hi突发奇想:如果允许使用数字2会发生什么事情?小Hi称其为扩展二进制数,例如(21)ii = 2 * 21 +
1 = 5, (112)ii = 1 * 22 + 1 * 21 +
2 = 8。
很快小Hi意识到在扩展二进制中,每个数的表示方法不是唯一的。例如8还可以有(1000)ii, (200)ii,
(120)ii 三种表示方法。
对于一个给定的十进制数 N ,小Hi希望知道它的扩展二进制表示有几种方法?
输入
一个十进制整数 N。(0 ≤ N ≤ 1000000000)
输出
N的扩展二进制表示数目。样例输入
8
样例输出
4
题目链接:http://hihocoder.com/contest/hihointerview11/problem/2
思路:
个人认为这道题属于递归+分治;
对于正整数N,
首先,考虑其第0位数:
若N为奇数,则第0位必定为 1;
若N为偶数则第0位为 0 或者 2 ;
接着,考虑(N-第0位)/ 2 可能的方案数,采取对第0位一样的做法。。。
代码如下:
//扩展二进制数 #include<cstdio> #include<cstring> int n; int get(int x){ if(x==0||x==1) return 1; if(x==2) return 2; if(x%2){ return get(x/2); } else { return get(x/2)+get((x-2)/2); } } int main(){ scanf("%d",&n); printf("%d\n",get(n)); }
相关文章推荐
- C#递归算法之分而治之策略
- 有关数据库SQL递归查询在不同数据库中的实现方法
- C#中的递归APS和CPS模式详解
- WinForm实现按名称递归查找控件的方法
- C#递归方法实现无限级分类显示效果实例
- 使用SqlServer CTE递归查询处理树、图和层次结构
- C#递归算法之打靶算法分析
- C#中的尾递归与Continuation详解
- mysql binlog二进制日志详解
- 详解C++编程中对二进制文件的读写操作
- 整理C# 二进制,十进制,十六进制 互转
- C#递归实现显示文件夹及所有文件并计算其大小的方法
- php递归创建目录的方法
- 在ASP.NET 2.0中操作数据之五十四:添加新记录时包含一个文件上传选项
- PHP递归创建多级目录
- c#二进制逆序方法详解
- JS幻想 读取二进制文件第1/2页
- Javascript递归打印Document层次关系实例分析
- 使用jscript实现二进制读写脚本代码
- C#递归算法寻找数组中第K大的数