Zar Oyunu
Pelin'in elinde her yüzü 1,2,3,4 sayılarıyla numaralandırılmış 9 adet 4-yüzlü (piramidal) zar var. Cansu'nun elinde ise her yüzü 1,2,3,4,5,6 sayılarıyla numaralandırılmış 6 adet 6-yüzlü (kübik) zar var.
Pelin ve Cansu zarları atıyorlar ve toplamları karşılaştırıyorlar: yüksek olan kazanıyor. Eğer toplamlar eşitse beraberlik oluyor.
Piramidal Pelin'in Kübik Cansu'yu yenme olasılığı kaçtır? Cevabı 7 ondalık basamağa yuvarlayarak veriniz.
Cevap: 0.5731441
c#:
public static void Run(bool sample)
{
long fourWins = 0;
long sixWins = 0;
for (int a = 1; a <= 4; ++a)
for (int b = 1; b <= 4; ++b)
for (int c = 1; c <= 4; ++c)
for (int d = 1; d <= 4; ++d)
for (int e = 1; e <= 4; ++e)
for (int f = 1; f <= 4; ++f)
for (int g = 1; g <= 4; ++g)
for (int h = 1; h <= 4; ++h)
for (int i = 1; i <= 4; ++i)
for (int m = 1; m <= 6; ++m)
for (int n = 1; n <= 6; ++n)
for (int o = 1; o <= 6; ++o)
for (int p = 1; p <= 6; ++p)
for (int q = 1; q <= 6; ++q)
for (int r = 1; r <= 6; ++r)
{
if (a + b + c + d +e +f +g +h +i > m + n + o + p + q + r)
fourWins++;
else
sixWins++;
}
Console.WriteLine("Four wins {0} and six wins {1} for ratio {2}", fourWins, sixWins, (double)fourWins / (fourWins + sixWins));
}
Mathematica:
p = Table[0, {n, 1, 36}];
For[i = 1, i <= Length@p, i++,
k = IntegerPartitions[i, {9}, {1, 2, 3, 4}];
For[j = 1, j <= Length@k, j++,
p[[i]] += Length@Permutations[k[[j]]];
];
];
p = p/Total@p;
c = Table[0, {n, 1, 36}];
For[i = 1, i <= Length@c, i++,
k = IntegerPartitions[i, {6}, {1, 2, 3, 4, 5, 6}];
For[j = 1, j <= Length@k, j++,
c[[i]] += Length@Permutations[k[[j]]];
];
];
c = c/Total@c;
z = 0;
Do[
z += p[[x]]*Sum[c[[n]], {n, 1, x - 1}];
,
{x, 1, 36}
];
Print[N[z, 7]];
Java:long all =46656*262144;
long win=0;
for (short p1=1;p1<=4;p1++)
for (short p2=1;p2<=4;p2++)
for (short p3=1;p3<=4;p3++)
for (short p4=1;p4<=4;p4++)
for (short p5=1;p5<=4;p5++)
for (short p6=1;p6<=4;p6++)
for (short p7=1;p7<=4;p7++)
for (short p8=1;p8<=4;p8++)
for (short p9=1;p9<=4;p9++)
for(short c1=1;c1<=6;c1++)
for(short c2=1;c2<=6;c2++)
for(short c3=1;c3<=6;c3++)
for(short c4=1;c4<=6;c4++)
for(short c5=1;c5<=6;c5++)
for(short c6=1;c6<=6;c6++){
int tp=p1+p2+p3+p4+p5+p6+p7+p8+p9;
int tc=c1+c2+c3+c4+c5+c6;
if(tp>tc)
win++;
}
double percentage=(double)win /all;
System.out.println(percentage);
c++:#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
void Throw(int d,int n,int s,int P[])
{
if(n==0)
{
P[s]++;
return;
}
for(int i=1;i<=d;i++) Throw(d,n-1,s+i,P);
}
int main()
{
double time=clock();
const int M = 36;
int P[M+1],C[M+1];
for(int i=0;i<=M;i++) P[i]=C[i]=0;
Throw(4,9,0,P);
Throw(6,6,0,C);
long long a=0,b=0;
for(int i=1;i<=M;i++)
{
for(int j=1;j<i;j++) a+=P[i]*C[j];
for(int j=1;j<=M;j++) b+=P[i]*C[j];
}
cout.precision(7);
cout<<double(a)/double(b)<<" in "<<clock()-time<<"ms"<<endl;
system("Pause"); return 0;
}
Maple:auf205:=proc()
local i1,i2,i3,i4,i5,k,l,anz,t;
t:=time();
anz:=0;
k:=[seq(0,i=1..36)];
l:=[seq(0,i=1..36)];
for i1 from 0 to 9 do
for i2 from 0 to 9-i1 do
for i3 from 0 to 9-i1-i2 do
l[i1+2*i2+3*i3+4*(9-i1-i2-i3)]:=l[i1+2*i2+3*i3+4*(9-i1-i2-i3)]+9!/(i1!*i2!*i3!*(9-i1-i2-i3)!);
od;
od;
od;
for i1 from 0 to 6 do
for i2 from 0 to 6-i1 do
for i3 from 0 to 6-i1-i2 do
for i4 from 0 to 6-i1-i2-i3 do
for i5 from 0 to 6-i1-i2-i3-i4 do
k[i1+2*i2+3*i3+4*i4+5*i5+6*(6-i1-i2-i3-i4-i5)]:=k[i1+2*i2+3*i3+4*i4+5*i5+6*(6-i1-i2-i3-i4-i5)]+6!/(i1!*i2!*i3!*i4!*i5!*(6-i1-i2-i3-i4-i5)!);
od;
od;
od;
od;
od;
anz:=sum(l[j]*sum(k[i],i=1..j-1),j=1..36);
print(anz,evalf(anz/4^9/6^6));
print(time()-t);
end proc;