假设线条是 a--------------d 中间取两个值是b和c a---b-----c------d 那么只需要判断 ab + cd > bc就行了吧 这么样是否简单点?
int a = 0; int d = 100; int r = 0; Random rdm = new Random(); for (int x = 0; x < 10000; x++) { int b = rdm.Next(0, 100); int c = rdm.Next(b, 100); if (((b - a) + (d - c)) > (c - b)) r++; } this.textBox1.Text = (r/10000.0).ToString();//这是我的程序 其中取c点不包括取在b点左面的情况 //反复执行的结果在83%到85%左右
int a = 0; int d = 100; int r = 0; Random rdm = new Random(); for (int x = 0; x < 10000; x++) { int b = rdm.Next(0, 100); int c = rdm.Next(0, 100); if (b == c) continue; if (b > c) { int f = b; b = c; c = f; } if (((b - a) + (d - c)) > (c - b)) r++; } this.textBox1.Text = (r/10000.0).ToString();连续回复不能超过参此 k a o 改过后概率在72%到74%左右
满足条件:
x<a/2
y>a/2
即可组成三角形.
中间取两个值是b和c a---b-----c------d
那么只需要判断 ab + cd > bc就行了吧
这么样是否简单点?
int d = 100;
int r = 0; Random rdm = new Random();
for (int x = 0; x < 10000; x++)
{
int b = rdm.Next(0, 100);
int c = rdm.Next(b, 100); if (((b - a) + (d - c)) > (c - b))
r++;
} this.textBox1.Text = (r/10000.0).ToString();//这是我的程序 其中取c点不包括取在b点左面的情况
//反复执行的结果在83%到85%左右
int d = 100;
int r = 0; Random rdm = new Random();
for (int x = 0; x < 10000; x++)
{
int b = rdm.Next(0, 100);
int c = rdm.Next(0, 100); if (b == c)
continue; if (b > c)
{
int f = b;
b = c;
c = f;
} if (((b - a) + (d - c)) > (c - b))
r++;
} this.textBox1.Text = (r/10000.0).ToString();连续回复不能超过参此 k a o
改过后概率在72%到74%左右
我认为楼主的意思是任意边形的(输入参数),能够组成形状的概率是多少.否则这个题目也就没有用程序开发的意义了.
在三条边的情况下答案是0.5;
推算算法来源于网络:长度a是没有用的信息,这个概率与长度无关
设总长为L,折成ABC三段
A/L为横坐标,B/L为纵坐标,可能的折法为(A/L)+(B/L)<1 如果要使ABC三段可以成为三角形
那么A+B>C,则(A/L)+(B/L)>0.5
|A-B|<C,则|(A/L)-(B/L)|<0.5
满足条件的面积比一下就出来概率了以下是我根据上面算法推算出来的.
以N为形状边数,扩展出来:
N为偶数:
L[0]/L+....+L[N/2-1]/L>L[N/2]/L+......+L[N-1]/L
=>L[0]+....+L[N/2-1]>L[N/2]+......+L[N-1]
一半长度相加大于另一半,结果还是0.5;
N为奇数:
L[0]/L+....+L[(N-1)/2]/L>L[(N-1)/2+1]/L+.....+L[N-1]/L
=>L[0]+....+L[(N-1)/2]>L[(N-1)/2+1]+.....+L[N-1]
其结果和三角形一样,结果也是0.5;