You are not logged in.
Pages: 1
A general solution to:
http://www.mathisfunforum.com/viewtopic.php?id=13145
using the formula in #2027 from http://www.mathisfunforum.com/viewtopic … 30#p299130
#include <stdio.h>
unsigned long bin[53][53];
void buildbin(){
long i,j;
for(i=0;i<53;i++){
for(j=0;j<53;j++){
if (j==0 || j==i)
bin[i][j]=1;
else if(j>i)
bin[i][j]=0;
else
bin[i][j]=bin[i-1][j]+bin[i-1][j-1];
}
}
}
int main(){
unsigned long sum=0;
unsigned long n[]={0,4,4,4,4,4,4,4,4,4,16}, i, j, k, h, m, sel=8; // sel: no. of cards selected
buildbin();
for(i=1;i<=10;i++)
for(j=i;j<=10;j++)
for(k=j;k<=10;k++) {
h=0;
if (i==j && i==k){
for(m=1;m<=i;m++)
h += n[m];
h=52-h;
for(m=3;m<=sel;m++)
sum += (i+j+k)*bin[n[i]][m]*bin[52-n[i]-h][sel-m];
}
else if (j!=k && i!=j){
for(m=1;m<=i;m++)
h += n[m];
h=52-h;
for(m=1;m<=n[i];m++)
sum += (i+j+k)*bin[n[k]][1]*bin[n[j]][1]*bin[n[i]][m]*bin[52-n[i]-h][sel-2-m];
}
else if (j==k && i!=j){
for(m=1;m<=i;m++)
h += n[m];
h=52-h;
for(m=1;m<=n[i];m++)
sum += (i+j+k)*bin[n[j]][2]*bin[n[i]][m]*bin[52-n[i]-h][sel-2-m];
}
else{
for(m=1;m<=i;m++)
h += n[m];
h=52-h;
for(m=2;m<=n[i];m++)
sum += (i+j+k)*bin[n[k]][1]*bin[n[i]][m]*bin[52-n[i]-h][sel-1-m];
}
}
printf("%.15f\n",sum/(double)bin[52][sel]);
return 0;
}
"Believe nothing, no matter where you read it, or who said it, no matter if I have said it, unless it agrees with your own reason and your own common sense" - Buddha?
"Data! Data! Data!" he cried impatiently. "I can't make bricks without clay."
Offline
Hi gAr;
Thanks for including that and for the whole amazing method of solving the card problem. Wunderbar!
In mathematics, you don't understand things. You just get used to them.
If it ain't broke, fix it until it is.
Always satisfy the Prime Directive of getting the right answer above all else.
Offline
Hi bobbym,
You're welcome!
It's one of the common methods in probability, I don't think there's something special in what I attempted.
"Believe nothing, no matter where you read it, or who said it, no matter if I have said it, unless it agrees with your own reason and your own common sense" - Buddha?
"Data! Data! Data!" he cried impatiently. "I can't make bricks without clay."
Offline
Hi gAr;
Sometimes using the simplest techniques to do a problem is best. I gave up on the approach until John on another site convinced me it was tedious but doable. You eliminated the tedious part and that was good work.
In mathematics, you don't understand things. You just get used to them.
If it ain't broke, fix it until it is.
Always satisfy the Prime Directive of getting the right answer above all else.
Offline
Hi,
I have improved the code to eliminate the conditions for the formula.
But couldn't get rid of the loops though, sigh!
This is the code for expected sum of highest 5 numbers from 8 randomly selected numbers:
#include <stdio.h>
unsigned long bin[53][53];
void buildbin(){
long i,j;
for(i=0;i<53;i++){
for(j=0;j<53;j++){
if (j==0 || j==i)
bin[i][j]=1;
else if(j>i)
bin[i][j]=0;
else
bin[i][j]=bin[i-1][j]+bin[i-1][j-1];
}
}
}
void init(unsigned long *t){
int i;
for(i=1;i<=10;i++)
t[i]=0;
}
int main(){
unsigned long sum=0, prod=1,x,t[11], cnt=0;
unsigned long n[]={0,4,4,4,4,4,4,4,4,4,16}, i, j, k, l, h, m, o, sel=8;
buildbin();
for(i=1;i<=10;i++)
for(j=i;j<=10;j++)
for(k=j;k<=10;k++)
for(l=k;l<=10;l++)
for(o=l;o<=10;o++)
{
h=0;
cnt=0;
prod=1;
init(t);
for(m=1;m<=i;m++)
h += n[m];
h=52-h;
t[i]++; // t[x] means the no. of times x appears in top 5
t[j]++;
t[k]++;
t[l]++;
t[o]++;
for(x=i+1;x<=10;x++){
cnt += t[x];
if (t[x] != 0)
prod *= bin[n[x]][t[x]];
}
for(m=t[i];m<=n[i];m++)
sum += (i+j+k+l+o)*prod*bin[n[i]][m]*bin[52-n[i]-h][sel-cnt-m];
}
printf("%.15f\n",sum/(double)bin[52][sel]);
return 0;
}
Last edited by gAr (2014-02-03 00:29:05)
"Believe nothing, no matter where you read it, or who said it, no matter if I have said it, unless it agrees with your own reason and your own common sense" - Buddha?
"Data! Data! Data!" he cried impatiently. "I can't make bricks without clay."
Offline
Hi gAr;
Looks like you only have one more challenge with these type problems. n highest cards in m picked.
In mathematics, you don't understand things. You just get used to them.
If it ain't broke, fix it until it is.
Always satisfy the Prime Directive of getting the right answer above all else.
Offline
Pages: 1