|
楼主 |
发表于 2011-4-18 01:00
|
显示全部楼层
说明:
本题来自于组合数学的一道题目(小学生是解不了的)。
只要模拟几次开关过程,便可以得出最终那些亮着灯的编号,这些编号相当具有规律:即
为不大于256的平方数,所以若在非竞赛的情况下,大家完全可以把平方数填上。
稍加分析,也可以发现,当265个人走过后,只有那些被开关过奇数次的灯最终是亮的,
有人用穷举方法,也证明了所有不大于256的平方数即为所求,也有些参赛者马上就意识
到这个问题归根结底是求一个数(包括自身和1)的因子个数,于是他们经过上述分析后
迅速得出结论,所有的平方数有奇数个因子。其实数论书中有定理:
“正整数n的因子个数(n=1,2,3,……)是奇数个的充要条件:n是一个完全平
方数,因子个数是偶数个的充要条件是n是一个非完全平方数”
相当一部分参赛者就把下面的公式作为了:
B2=TEXT(ROW(A1)^2,"[>256] "),然后下拉,交卷。
对于这样的或与此类似的,我都通过短信的方式向他们重述了题目的要求
本竞赛题的要求是:所有参赛者须将你在得出答数为平方数前的分析用EXCEL函数语言
表达出来,这在这道题目贴出后两天就加上了附加如下要求:
注意:解答公式必须能体现解题思路
以上是关于这题要求的说明,大多数参赛者是明白的。
解题思路:
已知
第一个人拨动了1,2,……,256盏的开关:1,2,3,4,5,6,7,8,9,10,11,12, …
第二个人拨动了2,4,6,……盏灯的开关: 2, 4, 6, 8, 10, 12, …
第三个人拨动了3,6,9,……盏灯的开关: 3, 6, 9, 12, …
……………………………………
用EXCEL语言表达:
第一个人拨动了: (MOD(ROW(1:256),1)=0)=TRUE
第二个人拨动了: (MOD(ROW(1:256),2)=0)=TRUE
第三个人拨动了: (MOD(ROW(1:256),3)=0)=TRUE
……………………………………
第二五六人拨动了:(MOD(ROW(1:256),256)=0)=TRUE
将这结果对应位置相加,即有:
MMULT(N(MOD(ROW(1:256),COLUMN(1:1))=0),ROW(1:256)^0)
其结果为:{1;2;2;3;2;4;2;4;3;4;2;6;2;4;4;5;2;6;2;6;4;4;2;8;3;4;4;6;2;8;2;6;4;4;4;9;2;4;4;8;2;8;2;6;6;4;2;10;3;6;4;6;2;8;4;8;4;4;2;12;……
从这串数中可见,排在平方数位置上的数为奇数,其余皆为偶数
很自然用MOD()函数去判别其奇偶性
MOD(MMULT(N(MOD(ROW(1:256),COLUMN(1:1))=0),ROW(1:256)^0),2) <1>
若为0的是偶数,为1的是奇数,其结果如下
{1;0;0;1;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;……
所有平方数位置上的是1,其余是0
以后的步骤就简单了,常规方法是:
=--TEXT(MOD(MMULT(N(MOD(ROW(1:256),COLUMN(1:1))=0),ROW(1:256)^0),2)*ROW(1:156),"0;;999")
其结果为:
{1;999;999;4;999;999;999;999;9;999;999;999;999;999;999;16;999;999;999;999;999;999;999;999;25;999;999;999;999;999;999;999;999;999;999;36;999;……
将其由小到大排序,(根据答题区域,可知只需取前29个数
=SMALL(--TEXT(MOD(MMULT(N(MOD(ROW(1:256),COLUMN(1:1))=0),ROW(1:256)^0),2)*ROW(1:256),"0;;999"),ROW(1:29))
上式等于:
{1;4;9;16;25;36;49;64;81;100;121;144;169;196;225;256;999;999;999;999;999;999;999;999;999;999;999;999;999}
最后用TEXT(……,"[=999] ")便解决问题了。
但是这样处理的结果是公式长度为121,不符合题目要求。
相当一部分参赛者就是没有将公式很好地简化,最后功亏一篑,未能满足题目要求,可惜了!
简化:
回到<1>式:
我们知道,确认一个数K的奇偶性有几种方法
ISODD(K),MOD(K,2),-1^K
上述三法中显然-1^K最简
我们将<1>式改为:-1^MMULT(N(MOD(ROW(1:256),COLUMN(1:1))=0),ROW(1:256)^0)
上式等于:
{-1;1;1;-1;1;1;1;1;-1;1;1;1;1;1;1;-1;1;1;1;1;1;1;1;1;-1;1;1;1;1;1;1;1;1;1;1;-1;1;1;1;1;1;1;1;1;1;1;1;1;-1;1;1;1;1;1;1;……
平方数位置上为-1,其余为1
如果现在将其由小到大排序,前面16个数为-1,后续全是1,但这就缺少了灯的编号信息
因此在排序前,还应将灯的编号信息附加上去,较简洁的方法如下:
=-1^MMULT(N(MOD(ROW(1:256),COLUMN(1:1))=0),ROW(1:256)^0)/ROW(1:256)
有些意外,一般都是乘以ROW(1:256),这儿却是除以ROW(1:256),但无论如何,这还是带上了等编号的信息
由小到大排序,取前29项,
=SMALL(-1^MMULT(N(MOD(ROW(1:256),COLUMN(1:1))=0),ROW(1:256)^0)/ROW(1:256),ROW(1:29))
按F9可见其结果为
{-1;-0.25;-0.111111111111111;-0.0625;-0.04;-0.0277777777777778;-0.0204081632653061;-0.015625;-0.0123456790123457;-0.01;-0.00826446280991736;-0.00694444444444444;-0.00591715976331361;-0.00510204081632653;-0.00444444444444444;-0.00390625;0.00392156862745098;0.00393700787401575;0.00395256916996047;0.00396825396825397;0.00398406374501992;0.004;0.00401606425702811;0.00403225806451613;0.00404858299595142;0.0040650406504065;0.00408163265306122;0.00409836065573771;0.00411522633744856}
然后再求其倒数
=1/SMALL(-1^MMULT(N(MOD(ROW(1:256),COLUMN(1:1))=0),ROW(1:256)^0)/ROW(1:256),ROW(1:29))
得到结果为
{-1;-4;-9;-16;-25;-36;-49;-64;-81;-100;-121;-144;-169;-196;-225;-256;255;254;253;252;251;250;249;248;247;246;245;244;243}
再用TEXT()函数:TEXT(……,";0")就得到正果了(多单元格数组公式)
=TEXT(1/SMALL(-1^MMULT(-(MOD(ROW(1:256),COLUMN(1:1))=0),ROW(1:256)^0)/ROW(1:256),ROW()-1),";0")
简化后公式长度为95
这是一种解法,参赛者中,22楼willin2000版主给出了这个,和我贴在10楼的公式仅一字之差
模拟256个人分别经过拨动开关还有一种更巧妙的方法,这里写上,
FREQUENCY(ROW(1:256)*COLUMN(1:1),ROW(1:256))
具体解释可参见wangg913版主在本期竞赛13楼可找到,此处不再赘述。
由这一方法可得最简公式为:
=TEXT(1/SMALL(-1^FREQUENCY(ROW(1:256)*COLUMN(1:1),ROW(1:256))/ROW(1:257),ROW()-1),";0;")
长度88
2楼,3楼,7楼等也用了此法,只是在简化上没有进一步优化使公式最优。
最后的叙述:
本题要得到正确的答数是非常容易的,参赛者中绝大部分都是知道的。但欲将分析用函数语言
完整表达出来,可能因为答数太过易得,相当一些人反而不知怎样用函数语言表达了,真有些“知其然不知其所以然”
本题第二个难点是在简化上面,willin2000版主功力深厚,在化简方面做到了最优。
相当一部分参赛者在没有很好地优化,结果公式超出了规定长度,不能得分,可惜了了!
明天将对各位参赛者提交的评审。
最后感谢大家参与,第一次出竞赛题,可能考虑不周,望大家指正!再次谢谢各位E友了!!!
[ 本帖最后由 fangjianp 于 2011-4-18 01:25 编辑 ] |
评分
-
1
查看全部评分
-
|