本帖最后由 jsxjd 于 2013-10-16 21:43 编辑
先上第一题,赞点人气,抽时间再斟酌。
C4 数组公式右拉,204 Chars:- =TEXT(MID(LOOKUP(110001%,SMALL(MMULT(1000*(COLUMN($A:$F)=5)+$C2:$H2+0.1%+10%^COLUMN($D:$I),MOD(INT(COLUMN($A:$BK)*2/2^ROW(1:6)),2)),ROW(1:63))),IF(C2,COLUMN()+6,2),IF(C2,1,6)),IF(C2,C1&"0套;;","共花费.00元。"))
复制代码 如果可以使用数组常量,C4 数组公式右拉,198 Chars:- =TEXT(MID(LOOKUP(110001%,SMALL(MMULT({0,0,0,0,1000,0}+$C2:$H2+0.1%+10%^COLUMN($D:$I),MOD(INT(COLUMN($A:$BK)*2/2^ROW(1:6)),2)),ROW(1:63))),IF(C2,COLUMN()+6,2),IF(C2,1,6)),IF(C2,C1&"0套;;","共花费.00元。"))
复制代码 第二题 非常具有挑战性,没有找到不符合条件值清零的有效方法,需要三次计算每种组合的金额,好象背着炸药包到处走动,而且还要为了降低嵌套层数加长表达式。先上一个319 Chars:- =TEXT(MID(10^10+LARGE(MMULT($C$2:$H$2+10^(9-COLUMN($A:$F)),MOD(INT(COLUMN($A:$BK)*2/2^ROW($1:$6)),2))*(MMULT($C$2:$H$2,MOD(INT(COLUMN($A:$BK)*2/2^ROW($1:$6)),2))=MAX(--TEXT(MMULT($C$2:$H$2,1-(MOD(COLUMN($A:$BK),2^ROW($1:$6))<2^ROW($1:$6)/2)),"[>100]!0"))),ROW(A1)),COLUMN(),6-5*(C$2>0)),IF(C$2,"0套"&C$1,"共花费.00元")&";;")
复制代码 通过使用一个数组常量,缩到 315 Chars,如果 10^10 可以改为 1E10,正好314 Chars:- =TEXT(MID(10^10+LARGE(MMULT($C$2:$H$2+10^{8,7,6,5,4,3},MOD(INT(COLUMN($A:$BK)*2/2^ROW($1:$6)),2))*(MMULT($C$2:$H$2,MOD(INT(COLUMN($A:$BK)*2/2^ROW($1:$6)),2))=MAX(--TEXT(MMULT($C$2:$H$2,1-(MOD(COLUMN($A:$BK),2^ROW($1:$6))<2^ROW($1:$6)/2)),"[>100]!0"))),ROW(A1)),COLUMN(),6-5*(C$2>0)),IF(C$2,"0套"&C$1,"共花费.00元")&";;")
复制代码 为了防止 10^10 不能简化为 1E10,继续缩减,由于6种玩具的总金额不会少于1 元,将最后一层Text 的最后一个参数合并,最后312 Chars:- =TEXT(MID(10^10+LARGE(MMULT($C$2:$H$2+10^{8,7,6,5,4,3},MOD(INT(COLUMN($A:$BK)*2/2^ROW($1:$6)),2))*(MMULT($C$2:$H$2,MOD(INT(COLUMN($A:$BK)*2/2^ROW($1:$6)),2))=MAX(--TEXT(MMULT($C$2:$H$2,1-(MOD(COLUMN($A:$BK),2^ROW($1:$6))<2^ROW($1:$6)/2)),"[>100]!0"))),ROW(A1)),COLUMN(),IF(C$2,1,6)),"[=1]0套"&C$1&";[>1]共花费.00元;")
复制代码 本人觉得第二题区域数组公式反而困难小一些,因为上面的公式花了29$来固定行列,下面是C13:I18 区域数组公式(308 Chars):- =TEXT(MID(1000+LARGE(MMULT(C2:H2+10%^COLUMN(C:H),MOD(INT(COLUMN(A:BK)*2/2^ROW(1:6)),2))*(MMULT(C2:H2,MOD(INT(COLUMN(A:BK)*2/2^ROW(1:6)),2))=MAX(--TEXT(MMULT(C2:H2,1-(MOD(COLUMN(A:BK),2^ROW(1:6))<2^ROW(1:6)/2)),"[>100]!0"))),ROW(1:6)),IF(C2:I2,COLUMN()+5,2),IF(C2:I2,1,6)),IF(C2:I2,"1套"&C1:I1,"共花费.00元")&";;")
复制代码 |