原文:

我们有一根长度为 l 的棍子。这根棍子在(n-1)个随机选择的点上折断了(零件的长度也可以是非整数或浮点数),所以我们得到了 n 个零件。我们需要找到这 n 块可以形成 n 边多边形的概率。 例:

input  : l = 5 n = 3
output : 0.25
we need to cut rope of length 5
into three parts.

首先我们需要找到 n 个长度可以形成 n 边多边形的条件。让我们考虑一个三角形,我们知道对于一个三角形,最大边的长度必须小于其他边的长度之和。同样,对于 n 边多边形,最大边的长度必须小于其他(n-1)条边的总和。为什么呢?假设我们把棍子分成两半。我们进一步将其中一半分成(n-1)个部分。我们永远不能将它们放置成闭合的多边形。(其实我们能做的最好的就是做 2 条平行线)。所以我们只需要找到没有部分长度大于等于 l/2 的概率。 现在我们需要研究概率。有许多方法来计算所需的概率,我们将使用几何方法。考虑一个周长为 l 的圆。我们在周长上放置 n 个点。他们躺在同一个半圆上的概率是。更多信息请参考链接,让我们用 p(e)表示。 这个概率实际上和折断棍子一样,这样至少有一部分长度为 1/2。但是我们想要的只是这个事件的补充,因此我们的答案是

c

// cpp program to find probability that
// a rope of length l when broken into
// n parts form a polygon.
#include
using namespace std;
double printprobability(unsigned l, unsigned n)
{
   unsigned p = (1 << (n-1));
   return 1.0 - ((double)n) / ((double)p);
}
int main()
{
   unsigned n = 3, l = 5;
   cout << printprobability(l, n);
   return 0;
}

java 语言(一种计算机语言,尤用于创建网站)

// java program to find probability that
// a rope of length l when broken into
// n parts form a polygon.
public class gfg {
 static double printprobability(int l, int n)
    {
       int p = (1 << (n-1));
       return 1.0 - ((double)n) / ((double)p);
    }
    // driver code
    public static void main(string args[])
    {
         int n = 3, l = 5;
         system.out.println(printprobability(l, n));
    }
    // this code is contributed by ankitrai1
}

python 3

# python3 program to find probability that
# a rope of length l when broken into
# n parts form a polygon.
def printprobability(l, n):
    p = (1 << (n-1))
    return 1.0 - (float(n) / float(p) )
if __name__=='__main__':
    n = 3
    l = 5
    print(printprobability(l, n))
# this code is contributed by ash264

c

// c# program to find probability 
// that a rope of length l when
// broken into n parts form a polygon.
using system;
class gfg
{
static double printprobability(int l, int n)
{
    int p = (1 << (n - 1));
    return 1.0 - ((double)n) /
                 ((double)p);
}
// driver code
public static void main()
{
    int n = 3, l = 5;
    console.writeline(printprobability(l, n));
}
}
// this code is contributed
// by inder_verma

服务器端编程语言(professional hypertext preprocessor 的缩写)


java 描述语言


output: 

0.25