一个射击问题:
射击10次,求出射出90环的概率的方法和结果!!
谢谢

解决方案 »

  1.   

    从0(脱靶) 到 10(满环)共11个数
    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;
      

  2.   


    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