【题目描述】
下面的图形为著名的杨辉三角形
如果我们按从上到下,从左到右的顺序把所有数排成一列,可以得到如下数列:
1 , 1 , 1 , 1 , 2 , 1 , 1 , 3 , 3 , 1 , 1 , 4 , 6 , 4 , 6 , 1...... 1,1,1,1,2,1,1,3,3,1,1,4,6,4,6,1...... 1,1,1,1,2,1,1,3,3,1,1,4,6,4,6,1......
给定一个正整数N,求出N第一次出现是在第几个数?
1
<
=
N
<
=
1
0
9
1<=N<=10^9
1<=N<=109
【输入】
数字n
【输出】
N第一次出现的位置(从1开始计算)
【样例输入】
6
【样例输出】
13
【参考代码】
#include<algorithm>
#include<iostream>
typedef long long ll;
using namespace std;
int N;
ll combine(int n, int m) {
ll ans = 1;
for (int i = 0; i < m; i++) {
ans *= (n - i);
ans /= (i + 1);
if (ans > N) {
return ans;
}
}
return ans;
}
bool f(int k) {
int l = 2 * k, r = max(N, l);
while (l < r) {
int mid = (l + r) >> 1;
if (combine(mid, k) >= N) {
r = mid;
} else {
l = mid + 1;
}
}
if (combine(r, k) == N) {
cout << 1ll * (r + 1) * r / 2 + k + 1 << endl;
return true;
} else {
return false;
}
}
int main() {
cin >> N;
if (N == 1) {
cout << "1" << endl;
} else {
for (int i = 17; i > 0; i--) {
if (f(i)) {
break;
}
}
}
return 0;
}