题目描述
有一个无限长的数字序列1,2,2,3,3,3,4,4,4,4,5,5,5,5,5。。。(数字序列从1开始递增,且数字k在该序列中正好出现k次),求第n项是多少
输入描述:
输入为一个整数n
输出描述:
输出一个整数,即第n项的值
示例1
输入
4
输出
3
说明
这是典型的找规律问题,等效于比较n和(i+1)*i/2
使用数学方法或者二分查找写,二分查找要仔细debug处理。
#include <iostream>
using namespace std;
int helper(int n)
{
int left = 1, right = n;
while (left <= right) {
int mid = left + (right - left) / 2;
if (mid*(mid + 1)/2 == n) return mid;
if (mid*(mid + 1) / 2 > n) right = mid - 1;
else left = mid + 1;
}
return left;
}
int main()
{
int n;
cin >> n;
cout << helper(n) << endl;
}