我们有一个长度为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)个部分。我们永远不能将它们放置成闭合的多边形。 (实际上,我们能做的最好的就是制作两条平行线)。因此,我们只需要找到没有一个部分的长度大于或等于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