TX2017秋招笔试题之geohash编码
2017-09-10 10:37
405 查看
问题描述: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)
输出描述:
输出二进制编码示例1
输入
80
输出
111100 ———————————————————————————————————————————————————————————————————————————————————— 求解思路:没啥说的,二分法,看清题,题目中精度要求为6,直接循环,不解释 代码实现:
#include<iostream> using namespace std; int BSerch(int n); int main() { int N; do { cin>>N; BSerch(N); }while(N>90||N<=-90); return 0; } int BSerch(int n) { int m,left=-90,right=90; for(int i=0;i<6;i++) { m=(left+right)/2; if(n<m) { right=m; cout<<0; } else if(n>=m) { left=m; cout<<1; } } cout<<endl; return 0; }
相关文章推荐
- TX2017秋招笔试题之geohash编码
- GeoHash C#版 找到周围8个区域的GeoHash编码
- 用打表的方式解决求Geohash当前区域周围8个区域编码
- 基于geohash6编码实现相邻4、9、16网格合并
- JAVA实现空间索引编码(GeoHash)
- 腾讯2017秋招笔试编程题:geohash [python]
- JAVA实现空间索引编码(GeoHash)
- GeoHash 经纬度坐标编码与解码算法
- 空间搜索(圆范围)中Geohash编码方案和网格编码方案对比探讨
- Hiho 125 GeoHash一·编码解码
- HiHoCoder #1436 : GeoHash一·编码解码
- WebGIS中GeoHash编码的研究和扩展
- 用打表的方式解决求Geohash当前区域周围8个区域编码
- C#实现空间索引编码(GeoHash)
- 88.2005 年 11 月金山笔试题。编码完成下面的处理函数。
- JAVA实现将GeoHash转化为对应的经纬度坐标
- Hiho 126 GeoHash二·附近目标
- GEO hash 核心原理
- 高效的多维空间点索引算法 — Geohash 和 Google S2(转)
- 笔试题 brotherword【tire || hash】