对于长度为36的所有三进制数(包括以...开头的数字) 0's),有多少具有1和2的完全相等的计数,或者恰好是1 超过1?
例如:
因此,对于长度为2的所有三位数,9种可能性中的5种匹配。 随着长度的增加,这可能会变小。长度为3,那里 是27分中的13分。
如果我们处理的是二进制数,可以使用多种解决方案here,但我不清楚如何将这些解法推广为三进制数。
答案 0 :(得分:1)
这个过程似乎很简单,就像组合运动一样。对于[1..18]中的每个N,在36位的tritstring中找到“1”的所有不同排列。然后乘以N“2”的不同排列的数量乘以未被“1”取的位置,并且也乘以N-1“2”s。找出这36个数字的总和。毕竟,为N = 0加1,这是所有“0”的十字符串。
36长的tritstring中N个trits的不同排列数应该是
36! / N!(36-N)!
这个问题听起来像是一个脑筋急转弯。我还没有进一步开发上述内容,但我非常怀疑是否存在快捷方式。
答案 1 :(得分:0)
我的一个朋友给了我以下答案,他比我更了解数学。我将此标记为“社区”,因为这不是我的工作。
您需要知道每个(大多数?)的方式数量 组合,不仅仅等于1 / 2s。 EG你可以把+18和 -18得到相同数量的1和2
18
0/0
0/1
...
0/18
1/0
1/1
...
1/17
...
18/0
直接解决似乎更容易。
0/0
1/0
1/1
2/1
2/2
3/2
3/3
...
18/17
18/18
进行组合学
0/0 = 1 way
1/0 = (36C1) = 36 possibilities
1/1 = (36C1) * (36-1C1) = 1260 possibilities
2/1 = (36C2) * (36-2C1) = 21420
2/2 = (36C2) * (36-2C2) = 353430
3/2 = (36C3) * (36-3C2) = 3769920
3/3 = (36C3) * (36-3C3) = 38955840
4/3
4/4
5/4
5/4
18/17 = (36C18) * (36-18C17) = 163352435400
18/18 = (36C18) * (36-18C18) = 9075135300
Perl脚本打印出bc的行,因为我懒得写 代码可以很好地平衡乘法和除法。
sub print_choose
{
$n = $_[ 0 ];
$c = $_[ 1 ];
if( $c == 0 ) { print "1"; return; }
for( $j = 0; $j < $c; ++$j ) {
if( $j ) { print "*"; }
print $n - $j;
}
for( $j = 0; $j < $c; ++$j ) {
print "/", $c - $j;
}
}
for( $i = 0; $i <= 18; ++$i ) {
if( $i > 0 ) {
print_choose( 36, $i );
print "*";
print_choose( 36 - $i, $i - 1 );
print "\n";
}
print_choose( 36, $i );
print "*";
print_choose( 36 - $i, $i );
print "\n";
}
foo.pl | bc | perl -ne '$sum += $_; print "$sum\n"'
1
37
1297
22717
376147
4146067
43101907
335270707
2453494507
14315547787
78370635499
355942682251
1512492877051
5477807830651
18506699821051
54336152794651
148388466850351
357393609196351
798626687482351
1592846228397151
2943019447952311
4906907767305271
7584937293695671
10709305074484471
14094036837005671
17218404617794471
19862100432308071
21750454585532071
22964396541176071
23611832250852871
23913968915368711
24027270164562151
24062676804935101
24071007779140501
24072477951059101
24072641303494501
24072650378629801