|
<p><br/></p><p>1.题目改编自一位会员的提问,具体答题要求见附件</p><p>2.前3名答案正确、符合答题要求者每人15个BB</p><p>3.用回复可见贴答题,重新编辑后无效。</p><p>4.10月15日前结贴,最优答案者设最佳答案</p><p></p><p><font color="#0909f7"><strong>3楼公式:</strong></font></p><p><font color="#0909f7">=RIGHT(SUM(MOD(LARGE(MMULT(COLUMN(1:1)^0,N(MID(B3&B4&B5&B6&B7,ROW(1:256),1)=(COLUMN(A:J)-1)&""))+FIND(COLUMN(A:J)-1,B3&B4&B5&B6&B7&5^19)%+(COLUMN(A:J)-1)%%,ROW(1:10))*10^4,10)*10^ROW(2:11))%,COUNT(MATCH("*"&COLUMN(A:J)-1&"*",B3:B7&"",)))</font></p><p><font color="#0909f7">MATCH("*"&COLUMN(A:J)-1&"*",B3:B7&"",),这一段很不错,充分利用MATCH函数精确查找文本时支持通配符的特性。</font></p><p><font color="#0909f7">但是把各个单元格连接的方法确是有些取巧,可这还是其次,最大的问题在于,把数字缩小后用MOD函数处理会产生浮点问题,如把数字位数增加,可能会得到不正确的结果,用放大数值的方法会好些。公式不能算完全正确。</font></p><p><font color="#0909f7"></font></p><p><font color="#0909f7"></font></p><p><font color="#0909f7"><strong>8楼公式:</strong></font></p><p><font color="#0909f7">=RIGHT(10^10+SUM(MOD(LARGE(MMULT(COLUMN(A:E)^0,LEN(B3:B7)-LEN(SUBSTITUTE(B3:B7,COLUMN(A:J)-1,)))*1000+FIND(COLUMN(A:J)-1,B3&B4&B5&B6&B7&5^19)*10+COLUMN(A:J)-1,ROW(1:10)),10)*10^ROW(1:10))/10,COUNT(FIND(COLUMN(A:J)-1,B3&B4&B5&B6&B7)))</font></p><p><font color="#0909f7">公式中求0-9数字的个数部分很好,和我的思路一样,也正是题目的考点之一</font></p><p><font color="#0909f7">公式写的很好,但是和3楼的公式一样,用了连接单元格的方法,有些取巧,这样就无法突现题目的另一考点。公式正确,送金币。</font></p><p><font color="#0909f7"></font></p><p><font color="#0909f7"></font></p><p><font color="#0909f7"></font></p><p><font color="#0909f7"><strong>我的公式:</strong></font></p><p><font color="#0909f7">=TEXT(SUM(RIGHT(LARGE(ISERR(1/(ROW(1:5)-MATCH("*"&COLUMN(A:J)-1&"*",B3:B7&"",)))*(MMULT(COLUMN(A:E)^0,LEN(B3:B7)-LEN(SUBSTITUTE(B3:B7,COLUMN(A:J)-1,)))*10^6+ROW(1:5)*10^5+FIND(COLUMN(A:J)-1,B3:B7&5^19)/1%+COLUMN(J:S)),ROW(1:10)))*10^ROW(2:11))%,REPT(0,COUNT(MATCH("*"&ROW(1:10)-1&"*",B3:B7&"",))))</font></p><p><font color="#0909f7">本题的考点在于有目的的构造数组,在二维区域中根据“数字出现次数&行数&列数&0-9数字”的方法,构建数字字符串,再用MATCH函数排除0-9中没出现过的数字(这部分用了willin2000老师的一个思路),得到我们想要的数字串。</font></p><p><font color="#0909f7">1.MMULT(COLUMN(A:E)^0,LEN(B3:B7)-LEN(SUBSTITUTE(B3:B7,COLUMN(A:J)-1,))),这部分求出0-9在区域中出现的次数。SUBSTITUTE (B3:B7,COLUMN(A:J)-1,),通过一维纵向数组与一维横向数组运算,得到二维数组。</font></p><p><font color="#0909f7">2.MATCH("*"&COLUMN(A:J)-1&"*",B3:B7&"",),利用MATCH函数精确查找文本时支持通配符的特性查找0-9在区域中第一次出现的位置,同样构造了一个 二维数组。</font></p><p><font color="#0909f7">3.ISERR(1/(ROW(1:5)-MATCH("*"&COLUMN(A:J)-1&"*",B3:B7&"",))),row(1:5)-.....,得到的0是我们想要的,1/0得到#DIV/0!错误,而当0-9中有数字没出现过时,match函数会返回#N/A错误,利用ISERR函数不能处理#N/A错误的特点,将match函数返回的错误结果排除。</font></p><p><font color="#0909f7">4.+COLUMN(J:S),而不是COLUMN(A:J)-1,省了几个字符,同样,(...*10^ROW(2:11))%,也是为了省字符。</font></p><p><font color="#0909f7">5.B3:B7&5^19,可以排除错误值,可以直接将match部分和数字串相乘,省了IF判断,少了一层嵌套。</font></p>
[此贴子已经被作者于2009-10-18 21:01:48编辑过] |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|