TX2017秋招笔试题之geohash编码
Posted 左岸繁华右岸殇
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TX2017秋招笔试题之geohash编码相关的知识,希望对你有一定的参考价值。
问题描述:
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编码的主要内容,如果未能解决你的问题,请参考以下文章