ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的测验 > 函数与公式 > 【竞赛题】找出连续数据升链的个数

【竞赛题】找出连续数据升链的个数

作者:绿色风 分类: 时间:2022-08-18 浏览:125
楼主
fangjianp
找出连续数据升链的个数(后一项比前一项增1,否则不能计为连续数据升链,以下简称升链)   
说明:   
1、A2:J8为原始数据区域,区域内数据可以引用   
2、每行为一组数据,数据是无序的   
3、求每组数据内一共可以配成多少条数据升链(增序),   
4、配链原则:   
   A.每次查找升链,应查找极长链   
   B.在剩余的数据中再一次查找极大升链   
   C.直到不存在升链为止   
5、举例说明(以第二行数据为例)   
   A. 第二行数据为:  1,2,3,2,1,3,3,2,4,5
   B. 容易得到最长升链为:1,2,3,4,5  
   C. 剩下的数据为:2,1,3,3,2  
   D. 得到极长升链为:1,2,3  
   E. 最后剩下的数据为:3,2
   F.    升链为:2,3
   G.故共有三条升链,模拟答案区域K2=3
   H.若剩余的数据中不存在数据升链,结束。
6、升链的最短长度为2
要求:
1、不用VBA、辅助列、定义名称,用函数解题
2、公式写在L2单元,下拉至L8
3、公式长度180以内:得技能分3分;130以内得技能分5,答案精彩再加3分
3.1、公式长度180以内:得技能分3分;130以内得技能分10,答案精彩再加10分(wangg913版主建议,以此为准)
截至日期:2011年6月5日
详见附件

 


 
寻找连续数据升链1.rar
2楼
fangjianp
我的解如下:
解法一
  1. =SUM(N(FREQUENCY(ROW($1:$100),(1-(FREQUENCY(A2:J2,ROW($1:$19))>=COLUMN(A:E)))*(ROW($1:$20)+(COLUMN(A:E)-1)*20))>2))
公式长:114

解法二
  1. =SUM(N(FREQUENCY(ROW($1:$600),(FREQUENCY(COUNTIF(OFFSET(A2,,,,COLUMN(A:J)),A2:J2)/1%+A2:J2,ROW($1:$599))=0)*ROW($1:$600))>2))
公式长:124
3楼
wcymiss
寻找升链的起点的个数。
  1. =SUM((COUNTIF(A2:J2,A2:J2+1)>=COUNTIF(OFFSET(A2,,,,COLUMN(A:J)),A1:J1))*(COUNTIF(OFFSET(A2,,,,COLUMN(A:J)),A1:J1)>COUNTIF(A2:J2,A2:J2-1)))

简化:
  1. =SUM(N(MMULT({1,1},N((COUNTIF(A2:J2,A2:J2+{1;-1})-COUNTIF(OFFSET(A2,,,,COLUMN(A:J)),A2:J2))*{-1;1}<{1;0}))=2))
4楼
wangg913
=SUM(N(2<FREQUENCY(ROW($1:$1101),(FREQUENCY(COUNTIF(OFFSET(A2,,,,COLUMN(A:J)),A2:J2)/1%+A2:J2,ROW($1:$1100))=0)*ROW($1:$1101))))

=FREQUENCY(FREQUENCY(ROW($1:$1101),(1-FREQUENCY(COUNTIF(OFFSET(A2,,,,COLUMN(A:J)),A2:J2)/1%+A2:J2,ROW($1:$1100)))*ROW($1:$1101)),{11,2})

=SUM(N(FREQUENCY(ROW($1:$600),ROW($1:$600)*ISNA(MATCH(ROW($1:$600),COUNTIF(OFFSET(A2,,,,COLUMN(A:J)),A2:J2)/1%+A2:J2,)))>2)
5楼
rongjun
数组公式
  1. =SUM(N(FREQUENCY(COLUMN(A:J)*100+ROW($1:$99),IF(FREQUENCY(A2:J2,ROW($1:$99))<COLUMN(A:J),COLUMN(A:J)*100+ROW($1:$99)))>2))
6楼
sharprain
  1. =SUM(--(FREQUENCY(IF(IF(MMULT(SMALL(MMULT((A1:J1=TRANSPOSE(A1:J1))*(ROW(1:10)>=COLUMN(A:J)),ROW(1:10)^0)/1%+TRANSPOSE(A1:J1),ROW(1:9)+COLUMN(A1:B1)-1)*{-1,1},{1;1})=1,1,0),ROW(1:9)),IF(IF(MMULT(SMALL(MMULT((A1:J1=TRANSPOSE(A1:J1))*(ROW(1:10)>=COLUMN(A:J)),ROW(1:10)^0)/1%+TRANSPOSE(A1:J1),ROW(1:9)+COLUMN(A1:B1)-1)*{-1,1},{1;1})=1,1,0)=0,ROW(1:9)))>0))
数组公式,太长了,算是凑数的吧,呵呵
7楼
chenhh803
先来一个能出答案的,
=SUM(--(FREQUENCY(--(COUNTIF(OFFSET(A2,,,,COLUMN(A:J)),A2:J2)&A2:J2),IF(FREQUENCY(--(COUNTIF(OFFSET(A2,,,,COLUMN(A:J)),A2:J2)&A2:J2),ROW($1:$900)),,ROW($1:$901)))>1))
上面的有问题,
=SUM(--(FREQUENCY(--(COUNTIF(OFFSET(A2,,,,COLUMN(A:J)),A2:J2)&TEXT(A2:J2,"000")),IF(FREQUENCY(--(COUNTIF(OFFSET(A2,,,,COLUMN(A:J)),A2:J2)&TEXT(A2:J2,"000")),ROW($1:$10000)),,ROW($1:$10001)))>1))
晕,太长,需要简化
=SUM(N(FREQUENCY(ROW($1:$11),(FREQUENCY(ROW($1:$9000),SMALL(COUNTIF(OFFSET(A2,,,,COLUMN(A:J)),A2:J2)/1%+A2:J2,ROW($1:$10)))>1)*ROW($1:$11))>1))
再简:
=SUM(N(FREQUENCY(ROW($1:$9000),(FREQUENCY(COUNTIF(OFFSET(A2,,,,COLUMN(A:J)),A2:J2)/1%+A2:J2,ROW($1:$9000))=0)*ROW($1:$9001))>2))
8楼
鬼狐
=SUM(--(MID(SUM((MMULT(SMALL(COUNTIF(OFFSET(A2,,,,COLUMN(A:J)),A2:J2)*100+A2:J2,IF({1,0},ROW($1:$9),ROW($2:$10))),{-1;1})=1)*10^(10-ROW($1:$9))),ROW($1:$9),2)="10"))
165字符,7层嵌套。。
差那么一点点就不行了
130以内的,搞不定~
9楼
wcymiss
我觉得题目主要考的是思路。
从楼主给的预设公式来看,数据源应该是不含0的。
考虑0的话,也只需改下参数就可了,不影响公式思路
10楼
Zaezhong
 
根据题目描述应该是第二个,不过最好还是楼主确认。荣版你的公式最后应该是到100,不是99
11楼
rongjun
这两个公式对0值的处理效果不一样,不知道以哪个为准?

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap