用 C++ 排列硬币
c++server side programmingprogramming
假设我们有 n 枚硬币,我们想将它们排成阶梯形,那么每 k 行必须正好有 k 枚硬币。所以,如果有 n 枚硬币,那么我们必须找出可以形成的完整阶梯行的总数。
因此,如果输入是 5,则输出将是 2,因为使用 5 枚硬币我们可以形成两个完整的阶梯行,最后一个需要 3 枚,但我们必须保留 2 −
* ** **
这可以直接使用此公式完成 −
$$\frac{\sqrt{(8n+1)}-1}{2}$$
示例
让我们看下面的实现,以便更好地理解 −
#include <bits/stdc++.h> using namespace std; class Solution { public: int arrangeCoins(int n) { return (sqrt(8*(long long)n+1)-1)/2; } }; main(){ Solution ob; cout << (ob.arrangeCoins(13)); }
输入
13
输出
4