用 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

相关文章