我们有一根长度为 L 的棍子。棍子在 (n-1) 个随机选择的点处断裂(部分的长度也可以是非整数或浮点数),所以我们得到了 n 个部分。我们需要找到这 n 块可以形成一个边多边形的概率。
例子:
Input : L = 5 n = 3
Output : 0.25
We need to cut rope of length 5
into three parts.
首先我们需要找到当n个长度可以形成一个边多边形时的条件。让我们考虑一个三角形,我们知道对于一个三角形,最大边的长度必须小于其他边的长度之和。类似地,对于边多边形,最大边的长度必须小于其他 (n-1) 边的总和。为什么?假设我们把棍子分成相等的两半。我们进一步将其中一半分成 (n-1) 个部分。我们永远不能将它们放置成一个封闭的多边形。 (实际上我们能做的最好的事情就是做2条平行线)。所以我们只需要找到没有部分长度大于或等于 L/2 的概率。
现在我们需要研究概率。有很多方法可以计算所需的概率,我们将使用几何方法。考虑一个周长为 L 的圆。我们在周长上放置 n 个点。它们位于同一个半圆上的概率是 .请参阅此链接以获取更多信息,让我们用 P(E) 表示。
这个概率实际上与折断棍子相同,至少有一个部分的长度为 L/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
}
Python3
# 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
PHP
Javascript
输出:
0.25
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。