返回题解分享
讨论 / 题解分享/ 帖子详情

杨辉三角(编程题) - 题解

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 喜欢 1 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!