2018 京东笔试疯狂序列
2017-09-08 23:55
218 查看
疯狂序列题回忆:1 2 2 3 3 3 4 4 4 4 . . . . .这样的序列,求第n个数对应序列中的那个数?n的范围为 [1, 1018]
,需要注意溢出,
直接1+2+3+......,判断结果>n会超时
所以返回sqrt(2*n) 是直接截掉小数部分的,要处理第二种情况,要四舍五入
实现方法为 round(sqrt(2*n)) 或者 int (sqrt(2*n)+0.5) ,这两种都能得到m,而不是有时候得到m-1
Ps: double 到int会直接截去小数部分
此题的n最大为10^18, sqrt有几个重载函数 ,有的可以存这么大的数,long long 也是64位
sqrt的函数原型参考:http://en.cppreference.com/w/cpp/numeric/math/sqrt
long long 的最大值也可以参考此网站
做法2是 (m^2+m)/2=n的解是(根号(1+8n)-1)/2, 所以求m=根号(0.25+2*s)-0.5 ,因为 n可能比(m^2+m)/2小,所以需要ceil(向上取整)一下这个结果:
ceil(sqrt(2*n+0.25)-0.5)
,需要注意溢出,
直接1+2+3+......,判断结果>n会超时
#include<iostream> #include<cmath> using namespace std; int main() { int n; while (cin >> n) { cout << sqrt(2 * n) << endl; } }
所以返回sqrt(2*n) 是直接截掉小数部分的,要处理第二种情况,要四舍五入
实现方法为 round(sqrt(2*n)) 或者 int (sqrt(2*n)+0.5) ,这两种都能得到m,而不是有时候得到m-1
Ps: double 到int会直接截去小数部分
此题的n最大为10^18, sqrt有几个重载函数 ,有的可以存这么大的数,long long 也是64位
sqrt的函数原型参考:http://en.cppreference.com/w/cpp/numeric/math/sqrt
long long 的最大值也可以参考此网站
做法2是 (m^2+m)/2=n的解是(根号(1+8n)-1)/2, 所以求m=根号(0.25+2*s)-0.5 ,因为 n可能比(m^2+m)/2小,所以需要ceil(向上取整)一下这个结果:
ceil(sqrt(2*n+0.25)-0.5)
相关文章推荐
- 2018京东笔试 疯狂序列 神奇数
- 京东2018实习笔试题——站队
- 2017.09.08京东校招C/C++编程题-疯狂的序列
- 2018网易笔试题-操作序列
- 京东2018校招Web前端工程师笔试有感
- 京东2018在线笔试题 第一个编程大题
- 京东2018校招在线笔试编程题①
- 2017阿里,百度,京东java面试+笔试大合集,2018的你会吗?
- 2018京东校招笔试题-数据分析岗
- 2018京东笔试
- 网易2018内推Java开发工程师笔试题----操作序列
- 2018网易校招笔试题之疯狂队列
- 编程题(1):笔试题-京东软件测试2018实习招聘
- 【2018校招笔试-京东=java开发】题目1括号匹配方案
- 给定整数序列求连续子串最大和 - 滴滴出行2018校园招聘内推笔试-研发工程师
- 2018京东前端笔试题笔试题
- 2018搜狐秋招笔试_Kolakoski序列_C++_部分回忆版Demo
- 搜狐集团2018秋季校招笔试题 kolakoski序列
- 京东2018秋招前端笔试编程题
- 2018京东校招Java笔试题