一个射击问题:
射击10次,求出射出90环的概率的方法和结果!!
谢谢
射击10次,求出射出90环的概率的方法和结果!!
谢谢
解决方案 »
- 弹出两次对话框
- IdTcpServer的ReadBuffer的问题。
- delphi开发的webservice 发布时出现的问题
- 关于Fastreport分栏打印的问题
- 在dbgrid中编辑时,移到下一个网格中,显示的全是蓝色的选择,但无法编辑,光标处于最后位置,若把光标从后拖到头,就可以从键盘输入了,我在用d
- delphi是否可以象visual foxpro一样直接导入exel表,是否有后者的brow等命令?
- 散分
- 两种不同方法创建form的问题。
- 有谁能帮我提供触摸屏查询系统的方案及完整的办公自动化方案,有机会可以合作谢谢
- WINSOCK 控件问题
- 谁有别的办法用Delphi写游戏存档
- delphi strtodatetime和fromatdatime问题
1 、0 1 2 3 4 5 6 7 8 9 10
2 、0 1 2 3 4 5 6 7 8 9 10
3 、0 1 2 3 4 5 6 7 8 9 10
4 、0 1 2 3 4 5 6 7 8 9 10
5 、0 1 2 3 4 5 6 7 8 9 10
6 、0 1 2 3 4 5 6 7 8 9 10
7 、0 1 2 3 4 5 6 7 8 9 10
8 、0 1 2 3 4 5 6 7 8 9 10
9 、0 1 2 3 4 5 6 7 8 9 10
10、0 1 2 3 4 5 6 7 8 9 10
现从每组中选择十个数,每个数在原组中不可以重复,求这十个数相加为90的组数 S=?
所有可能的组数 M=11*11……*11=11^10概率=S/M关键是求S,有一个很简单的方法那就是嵌套循环,用十个嵌套,每次从0到10循环,记录下和为90的个数,当然为了减少循环次数可以在第十层循环前判断 if Sum<80 then continue;
……
第三层循环前判断 if Sum<10 then continue;
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Math;type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Button2: TButton;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;procedure TForm1.Button1Click(Sender: TObject);
var
v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, vSum, vTCount: Integer;
vP, vAll: Extended;
begin
vTCount := Windows.GetTickCount;
vSum := 0;
for v1 := 10 downto 0 do
begin
for v2 := 10 downto 0 do
begin
vSum := v1 + v2;
if vSum < 10 then
continue;
for v3 := 10 downto 0 do
begin
vSum := v1 + v2 + v3;
if vSum < 20 then
continue;
for v4 := 10 downto 0 do
begin
vSum := v1 + v2 + v3 + v4;
if vSum < 30 then
continue;
for v5 := 10 downto 0 do
begin
vSum := v1 + v2 + v3 + v4 + v5;
if vSum < 40 then
continue;
for v6 := 10 downto 0 do
begin
vSum := v1 + v2 + v3 + v4 + v5 + v6;
if vSum < 50 then
continue;
for v7 := 10 downto 0 do
begin
vSum := v1 + v2 + v3 + v4 + v5 + v6 + v7;
if vSum < 60 then
continue;
for v8 := 10 downto 0 do
begin
vSum := v1 + v2 + v3 + v4 + v5 + v6 + v7 + v8;
if vSum < 70 then
continue;
for v9 := 10 downto 0 do
begin
vSum := v1 + v2 + v3 + v4 + v5 + v6 + v7 + v8 + v9;
if vSum < 80 then
continue;
for v10 := 10 downto 0 do
begin
vSum := v1 + v2 + v3 + v4 + v5 + v6 + v7 + v8 + v9 + v10;
if vSum = 90 then
Memo1.Lines.Add(IntTostr(v1) + '+' + IntTostr(v2) + '+' + IntTostr(v3) + '+' + IntTostr(v4) +
'+' + IntTostr(v5) + '+' + IntTostr(v6) + '+' + IntTostr(v7) + '+' + IntTostr(v8) + '+' +
IntTostr(v9) + '+' + IntTostr(v10));
end;
end;
end;
end;
end;
end;
end;
end;
end;
end; vTCount := Windows.GetTickCount - vTCount;
vSum := Memo1.Lines.Count;
vAll := Math.IntPower(11, 10);
vP := vSum / vAll; Memo1.Lines.Add('总数:' + IntToStr(vSum));
Memo1.Lines.Add('用时: ' + IntTostr(vTCount) + '毫秒');
Memo1.Lines.Add('概率: P=' + IntTostr(vSum) + '/' + FloatToStr(vAll) + '=' + FloatToStr(vP));
Memo1.Lines.SaveToFile('a.txt');
MessageBox(handle, pChar('计算完成'), pChar('提示'), MB_OK);
end;end.
总数:92378
用时: 364375毫秒
概率: P=92378/25937424601=3.56157179909213E-6