3020219474 题解分享 · 2024/4/9
杨辉三角(编程题) - 题解
``` #include <iostream> using namespace std; long long n; long long C(int a, int b) //C(a,b) { long long res = 1; for (int i = a, j = 1;j <= b;--i, ++j) { res = res * i / j; if (res > n) return res;//防止超过n直接爆long long,提前退出 } return res; } int main() { cin >> n; if (n == 1)//因为C(2,1)不存在,需要特判 { cout << 1 << endl; return 0; } for (int i = 16;i >= 1;--i) { long long l = 2 * i, r = max(l, n);//有可能l比n大 while (l < r)//二分查找左端点 { long long mid = (l + r) >> 1; if (C(mid, i) < n) l = mid + 1; else r = mid; } if (C(l, i) == n) { cout << (l + 1) * l / 2 + i + 1 << endl; return 0; } } return 0;} ```
查看全文
0 0 0 2