La probabilidad de acertar 15 u otra cantidad depende solamente de una cosa, de la cantidad de bolas distintas que salgan. Entonces dado un número fijo de extracciones, si se pueden repetir siempre es fácil que se repitan más y los números distintos serán menos en promedio, si entre grupos de 20 no puede haber repetidas el promedio de números distintos es mayor, y si no se puede repetir ninguna la cantidad de números distintos es el máximo.
Para responder esta pregunta usaré el programa que hice que ya estaba preparado para variaciones del número de bombos, bolas, etc. Únicamente tenía un fallo que afectaba solo cuando se pedían 100 aciertos luego las que hecho hasta ahora están bien. Era que había definido el tipo
CienNumeros=array [0..99] of integer
y entonces no servía cuando se pedían cien aciertos. Ahora lo he dejado así:
CientounoNumeros=array [0..100] of integer
Entonces imagino que quieres decir 4 bobos y se sacan 20 bolas en cada uno sin repetición dentro de cada bombo.
Este es el programa:
program VariosBombos;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this };
type
SalioNumero= array [0..99] of boolean;
CientounoNumeros= array [0..100] of integer;
const
CienNoes: SalioNumero = (false, false, false, false, false,false, false, false, false, false,
false, false, false, false, false,false, false, false, false, false,
false, false, false, false, false,false, false, false, false, false,
false, false, false, false, false,false, false, false, false, false,
false, false, false, false, false,false, false, false, false, false,
false, false, false, false, false,false, false, false, false, false,
false, false, false, false, false,false, false, false, false, false,
false, false, false, false, false,false, false, false, false, false,
false, false, false, false, false,false, false, false, false, false,
false, false, false, false, false,false, false, false, false, false);
var
NuBo, NuBombos, NuExtrac, Pronos, Tandas, SorTandas:integer;
i,j,k,l,n,Aciertos: integer;
BolasSalidasBombo, BolasSalidasTodosBombos: SalioNumero;
Buenos: CientounoNumeros;
Porcen: double;
begin
repeat
write('Numero de bolas, máximo 100: ');readln(NuBo);
until (Nubo>0) and (Nubo <= 100);
repeat
write('Numero de bombos, máximo 10: ');readln(NuBombos);
until (Nubombos >0) and (NuBombos <=10);
repeat
write('Numero de extracciones por bombo: ');readln(NuExtrac);
until (Nuextrac > 0) and (Nuextrac<=NuBo);
repeat
write('Numero de pronósticos: ');readln (Pronos);
until (pronos>0) and (pronos <= Nubo);
repeat
write('Numero de tandas de sorteos: ');readln(Tandas);
until Tandas >0;
repeat
write('Numero de sorteos por tanda: ');readln(SorTandas);
until SorTandas >0;
for i:=0 to 100 do Buenos:=0;
for i:=1 to Tandas do
begin
for j:=1 to SorTandas do
begin
Aciertos:=0;
BolasSalidasTodosBombos:=CienNoes;
for k:=1 to Nubombos do
begin
BolasSalidasBombo:= CienNoes;
for l:=1 to NuExtrac do
begin
repeat
n:= random(NuBo);
until not BolasSalidasBombo[n];
BolasSalidasBombo[n]:= true;
if (not BolasSalidasTodosBombos[n]) and (n < Pronos) then
inc(Aciertos,1);
BolasSalidasTodosBombos[n]:=true;
end;
end;
inc(Buenos[Aciertos],1);
end;
writeln('Tanda ',i);
for j:= Pronos downto 0 do
begin
Porcen:= 100*Buenos[j]/(SorTandas*i);
writeln(j:3,Buenos[j]:12,Porcen:12:7,' %');
end;
end;
readln;
end.
Siento no indentarlo, pero ya estoy cansado de hacerlo todas las veces. Yo tengo el programa indentado en el editor de Lazarus Free Pascal y cuando le doy a copiar y pegar es intolerable que los de TodoExpertos quiten los espacios de la izquierda, a ver si lo arreglan ya de una ... vez.
Y ahora a esperar que el ordenador haga los cálculos de los mil millones de sorteos que le he dicho, y después copiar los resultados y alinear las columnas que se habrán quedado desalineadas por los espacios que se haya comido la página.
Un saludo.