葡萄糖 发表于 2019-10-5 22:44:48

分为若干组使得组内平均数相等

将{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}分为若干组,使得每组的平均数均相等,有多少种分法?

.·.·. 发表于 2019-10-8 00:38:48

众所周知
平均数只能是5.5
所以问题可以改成,有多少种分法使得平均数等于5.5

然后分两种情况
1、{1,10}{2,9}{3,8}{4,7}{5,6}这五个集合与每一组的交要不然是本身要不然是空集
2、其他情况

于是……
除去{1,10}{2,9}{3,8}{4,7}{5,6}这样的分组之后,剩下的分法,至多有4个组

4^10<2^32,这已经是计算机可以暴搜的范畴了#include<stdio.h>
#define testmean(x) (count==0||(val<<1)/count==11)
int main(){
char q,w,e,r,t,y,u,i,o,p;
char val,count;
int right;
val=val=val=val=count=count=count=count=right=right=right=right=0;
for(q=0;q<1;q++){
    val+=1;count+=1;
for(w=0;w<4;w++){
    val+=2;count+=1;
for(e=0;e<4;e++){
    val+=3;count+=1;
for(r=0;r<4;r++){
    val+=4;count+=1;
for(t=0;t<4;t++){
    val+=5;count+=1;
for(y=0;y<4;y++){
    val+=6;count+=1;
for(u=0;u<4;u++){
    val+=7;count+=1;
for(i=0;i<4;i++){
    val+=8;count+=1;
for(o=0;o<4;o++){
    val+=9;count+=1;
for(p=0;p<4;p++){
    val+=10;count+=1;
    if(testmean(0)&&testmean(1)&&testmean(2)&&testmean(3)){
      right[(0!=count)+(0!=count)+(0!=count)]++;
    }
    val-=10;count-=1;
}
    val-=9;count-=1;
}
    val-=8;count-=1;
}
    val-=7;count-=1;
}
    val-=6;count-=1;
}
    val-=5;count-=1;
}
    val-=4;count-=1;
}
    val-=3;count-=1;
}
    val-=2;count-=1;
}
    val-=1;count-=1;
}
return printf("%d %d %d %d %d",right,right,right,right,right+right+(right>>1)+right/6+1);
}
time ./math
1 69 174 60 168
real    0m0.024s
user    0m0.016s
sys   0m0.016s
如果没算错应该一共168种情况,分别对应
都属于第一组(1种)
属于两个组,1在1组(69种)
属于3个组,1在1组,交换2,3组视为不同的结果(174种)
属于4个组,1在1组,交换2,3,4组视为不同的结果(60种)
属于5个组,只能是{1,10}{2,9}{3,8}{4,7}{5,6}
去除重复(交换)之后共计168种

hujunhua 发表于 2019-10-8 12:08:41

本坛有过一个深入的讨论,但目前还没有最终结果。
自然数前段的均衡样本

chyanog 发表于 2019-10-9 09:59:01

本帖最后由 chyanog 于 2019-10-9 10:18 编辑

Needs["Combinatorica`"];
Length],AllTrue==11/2&]]]

Table,i],Equal@@Mean/@#&]],{i,5}]

hujunhua 发表于 2019-10-10 08:23:10

@wayne
你接的是这个贴子:从1-33中,任取6个数,要求和为102,共有几种取法?
页: [1]
查看完整版本: 分为若干组使得组内平均数相等