C++,
pasted
on Oct 13:
|
int nb(int x){
x=((x>>1)&0x55555555) + (x&0x55555555);
x=((x>>2)&0x33333333) + (x&0x33333333);
x=((x>>4)&0x0f0f0f0f) + (x&0x0f0f0f0f);
x=((x>>8)&0x00ff00ff) + (x&0x00ff00ff);
return ((x>>16)&0x0000ffff) + (x&0x0000ffff);
}
int main(){
int i,j,k,f[12],v[20],c,cv,cn,cp[21];
for(i=0;i<20;i++)v[i]=1<<i;
f[ 0] = v[ 0] | v[ 1] | v[ 2] | v[ 3] | v[ 4];
f[ 1] = v[ 0] | v[ 1] | v[ 5] | v[ 6] | v[10];
f[ 2] = v[ 1] | v[ 2] | v[ 6] | v[ 7] | v[11];
f[ 3] = v[ 2] | v[ 3] | v[ 7] | v[ 8] | v[12];
f[ 4] = v[ 3] | v[ 4] | v[ 8] | v[ 9] | v[13];
f[ 5] = v[ 4] | v[ 0] | v[ 9] | v[ 5] | v[14];
f[ 6] = v[ 5] | v[14] | v[10] | v[19] | v[15];
f[ 7] = v[ 6] | v[10] | v[11] | v[15] | v[16];
f[ 8] = v[ 7] | v[11] | v[12] | v[16] | v[17];
f[ 9] = v[ 8] | v[12] | v[13] | v[17] | v[18];
f[10] = v[ 9] | v[13] | v[14] | v[18] | v[19];
f[11] = v[15] | v[16] | v[17] | v[18] | v[19];
for(i=0;i<21;i++)cp[i]=0;
for(i=0,c=0,cv=0;i<10;i++)for(j=i+1;j<11;j++)for(k=j+1;k<12;k++){
cn=nb(f[i] | f[j] | f[k]);
cp[cn]++;
cv+=cn;
c++;
}
printf("%d ,%d ,%f\n",c,cv,(double)cv/(double)c);
printf("10:%d ,11:%d ,13:%d ,15:%d ,tatal:%d\n\n",
cp[10],cp[11],cp[13],cp[15],cp[10]+cp[11]+cp[13]+cp[15]);
for(i=0;i<21;i++)cp[i]=0;
for(i=0,c=0,cv=0;i<12;i++)for(j=0;j<12;j++)for(k=0;k<12;k++){
cn=nb(f[i] | f[j] | f[k]);
cp[cn]++;
cv+=cn;
c++;
}
printf("%d ,%d ,%f\n",c,cv,(double)cv/(double)c);
printf("5:%d ,8:%d ,10:%d ,11:%d ,13:%d ,15:%d ,tatal:%d\n\n",
cp[5],cp[8],cp[10],cp[11],cp[13],cp[15],cp[5]+cp[8]+cp[10]+cp[11]+cp[13]+cp[15]);
return 0;
}
|
Output:
|
220 ,2720 ,12.363636
10:20 ,11:60 ,13:120 ,15:20 ,tatal:220
1728 ,19980 ,11.562500
5:12 ,8:180 ,10:336 ,11:360 ,13:720 ,15:120 ,tatal:1728
|
|