ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > 函数与公式 > 如何生成 首末位数字 互补的序列

如何生成 首末位数字 互补的序列

作者:绿色风 分类: 时间:2022-08-18 浏览:113
楼主
w83365040371
Q:如何生成 首末位数字 互补的序列?

如下图所示, 首末位互补的意思即首位数字加上末尾数字的和等于10


图1.

 



A:
1.利用mod可以生成两个互补的数字, 比如28,就可以通过公式mod(2,9)&mod(-2,9)+1得到,再串连上首末位之间的数字或者空值,就可以得到我们想要的数字,公式如下


公式1.
  1. =MOD(ROW(A1)-1,9)+1&TEXT(INT(ROW(A9)/9)-2,"0;;0")&MOD(-ROW(A1),9)+1


2.同时,在100以内的首末位数字互补的数字,只有19、28、37、46、55、64、73、82、91等9个,且每个数字之间的差是9, 那么在100以内的数字的公式为10+row(a1)*9,然后通过replace在这生成的两位数间插入其他的数字或者是空值,
得到我们想要的数字,公式如下


公式2.
  1. =REPLACE(19+9*MOD(ROW(A1)-1,9),2,,TEXT(INT(ROW(A9)/9)-2,"0;;0"))


公式1.和公式2.得到的结果见图2.


图2.

 

扩展:

问题1.上面的案例仅仅是首末位数字互补,那么我们对上面的数据进一步限制,如果是回文互补的字符串应该怎么做?(字符串长度为偶数) 见图3.  

备注:回文互补,即字符串的正数N位和倒数N位的数字和为10,且字符串中不能含有0(N=1、2、3...)


图3.

 

思路:将已知的符合题目要求的数字从小到大排列,并在每个字符串的中点位置做切割线,见图5.

图5.

 
图5.中白色线条即上面我们所说的切割线, 通过观察切割线前面的字符串所组成的序列,发现其实是一个不含有0的数字序列,根据这个思路,借http://www.exceltip.net/thread-29605-1-1.html
中的公式,稍微改下,即我们想要的公式



公式3.
  1. =SUBSTITUTE(LEFT(E5,LEN(E5)/2)+1,0,1)

以A15单元格的数据"1199"为例, 下一步将数字字符串前后连接等量的0,构成14位数字(excel数字最高位为15),形成的字符串为"00000119900000", 对这个14位数字, 进行分解, 得到的结果如下图:


图6.

 

图6.中的位阶是指10的系数,黑色箭头所指即图5.中的白色分割线,那么形成黑色箭头左边的数组的公式为


公式4.
  1. =LEFT(RIGHT(0&SUBSTITUTE(LEFT(E5,LEN(E5)/2)+1,0,1),ROW($1:$7)))

以图6.中的黑色箭头为中心对折, 结果见下图



图7.

 

图7.中的第1列的数据(列标在图中是红底白字
)已知由公式4.生成,而第2列和第1列是互补数据.   

以第1行的数组{1,9}为例,以数字1为基础生成数组{1,9}的公式为
公式5.
  1. MOD(1*{1,-1},10)


那么生成第1列和第2列的公式为

公式6.
  1. =MOD(LEFT(RIGHT(0&SUBSTITUTE(LEFT(E5,LEN(E5)/2)+1,0,1),ROW($1:$7)))*{1,-1},10)
观察图7中的3、4列的数据,得到能够生成图7.中的数据的公式为
公式7.
  1. =ROW($1:$7)*{1,-1}+{6,7}

按照思路,将图6.中的各个位阶上的数字相加,并将0替换掉,就是我们最总想要的结果,那么最终公式为公式8.

公式8.
  1. =SUBSTITUTE(SUM(MOD(LEFT(RIGHT(0&SUBSTITUTE(LEFT(E5,LEN(E5)/2)+1,0,1),ROW($1:$7)))*{1,-1},10)*10^(ROW($1:$7)*{1,-1}+{6,7})),0,)


此外,图6.中的位阶可以用另外一组数字表示,见图11.


图11.

 


如图11.所示,我们可以将黑色箭头处理解为小数点,即箭头左边的数字为整数位阶,右边的数字为小数位阶
那么以黑色箭头为中心对折,结果见图12.


图12.

 
观察上图,可知知道生成第3列和第4列数据的公式为
公式10.

  1. ROW($1:$7)*{1,-1}-{1,0}



根据已知的生成第1列和第二列数据的公式6.,将图11.中的对应位阶的数字相加,最后将,得到此题的另外一种解法
公式11.
  1. =SUBSTITUTE(SUM(MOD(LEFT(RIGHT(0&SUBSTITUTE(LEFT(I6,LEN(I6)/2)+1,0,1),ROW($1:$7)))*{1,-1},10)*10^(ROW($1:$7)*{1,-1}-{1,0})),".",)




怎么生成字符串长度为奇数的回文序列,如下图所示:

备注:根据引用材料,在这里字符串中间的字符只能为0


图8.

 

观察模拟数据,发现去掉中间的0后,生成的序列,即为我们在问题1.中所说的字符串长度为偶数的回文字符序列,见图9.


图9.

 

那么嵌套replace和公式8.得到的公式,即为能够生成我们想要的序列的公式,结果见图10.

公式9.
  1. REPLACE(SUBSTITUTE(SUM(MOD(LEFT(RIGHT(0&SUBSTITUTE(LEFT(J4,LEN(J4)/2)+1,0,1),ROW($1:$7)))*{1,-1},10)*10^(ROW($1:$7)*{1,-1}+{6,7})),0,),LEN(SUBSTITUTE(LEFT(J4,LEN(J4)/2)+1,0,1))+1,,0)
备注:由图9.可知0是插入到白色分割线的位置LEN(SUBSTITUTE(LEFT(J4,LEN(J4)/2)+1,0,1)),再根据replace公式的特点,生成其第二参数LEN(SUBSTITUTE(LEFT(J4,LEN(J4)/2)+1,0,1))+1,由于嵌套的问题,公式9只适用于07以上版本(包括07)

图10.

 

公式9.在03中使用受到限制,那么有方法在03中生成上图我们想要的序列吗?


观察公式11.发现只要将小数点替换成0,就能生成我们想要的数字,
公式12.
  1. =SUBSTITUTE(SUM(MOD(LEFT(RIGHT(0&SUBSTITUTE(LEFT(I6,LEN(I6)/2)+1,0,1),ROW($1:$7)))*{1,-1},10)*10^(ROW($1:$7)*{1,-1}-{1,0})),".",)
从公式长度评价,公式12.相比公式9.更简洁,且不受版本限制


在这里,我们仅仅介绍了三个问题的解决公式,及公式的思路.其实,由原始的问题,还可以引发出更多的问题,比如:
1.生成奇偶混合长度的回文互补字符串(奇数长度的字符串中间数字为0)
2.生成奇偶混合长度的回文互补字符串(奇数长度的字符串中间数字为任意个位数,即0,1,2...9)
3.生成回文数字字符串
....



互补序列.rar
2楼
天南地北
个人觉得这个有点理解偏了一点意思,应该是,首尾互补,如果是长度是2n,前N位和后N位应该对应的互补,如果长度是2n+1位,那么前N位和后N位应该对应的互补,且中间为0,,这样的数据规律还是有的,貌似不大好归纳,楼主有兴趣可以尝试琢磨一下!2-4位的这样的互补数不多,粗略统计了一下是108个!
3楼
w83365040371
原题的意思是形成类似于回文序列的数据?
4楼
wjc2090742
应该这么说:以10为模,两端数字互为补数;或者两端数字互为以10为模的补数。
5楼
CheryBTL
有点意思,下载学习下~~~
6楼
w83365040371
生成回文互补序列(2n)的公式b1输入19,
b2输入公式
  1. =SUBSTITUTE(SUM(MOD(LEFT(RIGHT(0&SUBSTITUTE(LEFT(B1,LEN(B1)/2)+1,0,1),ROW($1:$7)))*{1,-1},10)*10^(ROW($1:$7)*{1,-1}+{6,7})),0,)
待整理..........

免责声明

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

评论列表
sitemap