|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
本帖最后由 anonym 于 2019-11-16 22:12 编辑
继续第10题。
题目是有一定难度的,根据楼主的答案设定,我猜测楼主想简单了。如果周六,周日都是1个人值班,必须同余,最小公倍数是最小的同余值。可是题目已知周六,周日都是2个人值班,这两天就不需要一定同余,余数允许相差1,也就是存在小于最小公倍数的答案。
楼主的答案是错误的!可是根据他实际列举的数据,对应的答案又都是对的,怎么回事?我说过“数据很重要”,特别是测试的数据,如果不能覆盖所有的情况,就会存在BUG被忽视的可能。举一个楼主答案出错的数据,一组5人,一组7人,按照楼主的理解,答案是第28天星期日,5人组和7人组都是第36人次,两个组长同日值班。正确的答案应该是,第13天星期六,5人组第16人次,7人组第15人次,两个组长同日值班。
做了一个符合答案的普通公式,有点长,也有点慢,
- =TEXT(TEXT(MOD(IFERROR(MATCH(1,MMULT(N(MOD(ROW(INDIRECT("1:"&C2*C3))+{1,0},C2)=1),{1;1})*MMULT(N(MOD(ROW(INDIRECT("1:"&C2*C3))+{1,0},C3)=1),{1;1})*(MMULT(TEXT(MOD(ROW(INDIRECT("1:"&C2*C3))+{0,-1},9),"[>6]6;[>5]5;0")+2,{1;-1})=0),),LCM(C2:C3)),9),"[>6]6;[>5]5;0")+2,"aaaa")
复制代码
下面这个公式快一点,但是是数组公式,无法在合并单元格输入,只能在单个单元格输入,
- =TEXT(IFERROR(1/1/MMULT(MMULT(TRANSPOSE(1^ROW(INDIRECT("1:"&INT((C2*C3)/9)))),N(MMULT((MOD((ROW(INDIRECT("1:"&INT((C2*C3)/9)))-1)*9+{6,7,8,9},C2)=1)+(MOD((ROW(INDIRECT("1:"&INT((C2*C3)/9)))-1)*9+{6,7,8,9},C3)=1),{1,0;1,0;0,1;0,1})=2)),{7;1}),TEXT(MOD(LCM(C2:C3),9),"[>6]6;[>5]5;0")+2),"aaaa")
复制代码
|
评分
-
1
查看全部评分
-
|