编程题—geohash编码
2018-01-02 16:20
197 查看
内容会持续更新,有错误的地方欢迎指正,谢谢!
此题考察纬度的二进制编码:算法对纬度[-90, 90]通过二分法进行无限逼近(取决于所需精度,本题精度为6)。注意,本题进行二分法逼近过程中只采用向下取整来进行二分,针对二分中间值属于右区间。算法举例如下: 针对纬度为80进行二进制编码过程:
1) 区间[-90, 90]进行二分为[-90, 0),[0, 90],成为左右区间,可以确定80为右区间,标记为1;
2) 针对上一步的右区间[0, 90]进行二分为[0, 45),[45, 90],可以确定80是右区间,标记为1;
3) 针对[45, 90]进行二分为[45, 67),[67,90],可以确定80为右区间,标记为1;
4) 针对[67,90]进行二分为[67, 78),[78,90],可以确定80为右区间,标记为1;
5) 针对[78, 90]进行二分为[78, 84),[84, 90],可以确定80为左区间,标记为0;
6) 针对[78, 84)进行二分为[78, 81), [81, 84),可以确定80为左区间,标记为0;
输入描述:
输入包括一个整数n,(-90 ≤ n ≤ 90)
输出描述:
输出二进制编码
输入例子:
80
输出例子:
111100
值在左区间记为0,在右区间记为1
由于精度为6,所以直接迭代6次即可。。
所用数据结构: vector
总结:挺简单的一道题,看着题目信息量很大的题反而简单,排在后面的题一般也不难。所以,各位不要因为题的信息量大或排在后面而产生畏难心理!
问题
geohash编码:geohash常用于将二维的经纬度转换为字符串,分为两步:第一步是经纬度的二进制编码,第二步是base32转码。此题考察纬度的二进制编码:算法对纬度[-90, 90]通过二分法进行无限逼近(取决于所需精度,本题精度为6)。注意,本题进行二分法逼近过程中只采用向下取整来进行二分,针对二分中间值属于右区间。算法举例如下: 针对纬度为80进行二进制编码过程:
1) 区间[-90, 90]进行二分为[-90, 0),[0, 90],成为左右区间,可以确定80为右区间,标记为1;
2) 针对上一步的右区间[0, 90]进行二分为[0, 45),[45, 90],可以确定80是右区间,标记为1;
3) 针对[45, 90]进行二分为[45, 67),[67,90],可以确定80为右区间,标记为1;
4) 针对[67,90]进行二分为[67, 78),[78,90],可以确定80为右区间,标记为1;
5) 针对[78, 90]进行二分为[78, 84),[84, 90],可以确定80为左区间,标记为0;
6) 针对[78, 84)进行二分为[78, 81), [81, 84),可以确定80为左区间,标记为0;
输入描述:
输入包括一个整数n,(-90 ≤ n ≤ 90)
输出描述:
输出二进制编码
输入例子:
80
输出例子:
111100
分析
二分法的简单应用值在左区间记为0,在右区间记为1
由于精度为6,所以直接迭代6次即可。。
所用数据结构: vector
代码
#include <iostream> #include <vector> using namespace std; void DividFunc(int num,int beginVal,int endVal)//迭代实现 { int mid; vector<int> res; for(int i=0;i<6;++i) { mid=(beginVal+endVal+1)/2;//这里需要注意+1,你体会一下就知道啦~ if(num>=mid) { res.push_back(1); beginVal=mid; } else { res.push_back(0); endVal=mid-1; } } for(int i=0;i<6;++i) { cout<<res[i]; } cout<<endl; } int main() { int num; while(cin>>num) { DividFunc(num,-90,90); } return 0; }
总结:挺简单的一道题,看着题目信息量很大的题反而简单,排在后面的题一般也不难。所以,各位不要因为题的信息量大或排在后面而产生畏难心理!
相关文章推荐
- 腾讯2017秋招笔试[编程题] geohash编码
- 腾讯2017秋招笔试编程题--geohash编码
- POJ C程序设计进阶 编程题#3 : 排队游戏
- introduction to Java Programming 编程题5.4<反向显示一个整数>
- c++ primer plus 第七章《编程题7.13.10》
- Introduction to Java Programming编程题5.14<计算数列>
- C/C++编程题之计算一个数字的立方根
- Introduction to Java Programming编程题9.9<二进制转十六进制>
- POJ C++程序设计 编程题#3 编程作业—多态与虚函数
- POJ C++程序设计 编程题#3 Set 编程作业—STL2
- 2016校园招聘笔试编程题_1
- Introduction to Java Programming编程题8.36<Latin square>
- 2016校招编程题<二>
- POJ 算法基础 编程题#2: 滑雪
- 阿里2015实习生招聘在线测试----编程题,设计有限任务响应队列
- 京东2015在线笔试----编程题--分苹果
- 当当网笔试的两道编程题
- 南邮编程在线编程题十二:八进制转换为二进制
- C++ Primer Plus 第六版(中文版)课后编程题----第三章
- 第六章(函数)编程题一