//腾讯校招笔试题
/*
geohash 编码: geohash 常用于将二维的经纬度转换为字符串,分为两步:第一步是经纬度的二进制编码,第二部是 base32 转码。
此题考察唯独的二进制编码:算法对维度 [-90,90] 通过二分法进行无限逼近(取决于所需精度,本题精度为 6 )。注意,本题进行二分法逼近过程中只采用向下取整来进行二分,针对二分中间值属于右区间。算法举例如下:
(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 ;
已达精度要求,编码为 111100
样本输入: 80
样本输出: 111100
*/
/*
题目分析:题目要求很明确,对一个数组二分查找,找寻数字所在的区间,如果是左区间,标记为0,如果为右区间,标记为1.
*/
#if 1 #include<iostream> using namespace std; string Solve(int n) { string num; int start = -90; int end = 90; int mid = 0; for(int i = 0;i<6&&start<end;i++) { mid = start+(end-start)/2; if(n<mid) { end = mid; num+='0'; } else { start = mid; num+='1'; } } return num; } int main() { int n; cin>>n; string ret = Solve(n); cout<<ret<<endl; } #endif