新的计数序列(第1届第2题)

本文介绍了一种特殊的计数方法,即跳过所有含有数字1的整数进行计数,并提供了一种高效的算法来实现正常计数与该特殊计数间的转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼

题目要求

        问题描述:自从过完双11,小明就对数字1产生了厌恶,于是他决定今后计数时,凡是带有1的数字都跳过。比如正常的计数序列是1,2,3,4,5,6,7,8,9,10,11...而小明对应的计数序列为2,3,4,5,6,7,8,9,20,22,23...请写一个程序,帮小明计算一个正常计数序列中的数在他自己的计数序列中应该是多少?

        样例输入1:正常计数中的次序:1

        样例输出1:小明计数中的次序:2

        样例输入2:正常计数中的次序:9

        样例输出2:小明计数中的次序:20

        样例输入3:正常计数中的次序:11

        样例输出3:小明计数中的次序:23


解决方案

        如下图,观察小明的计数序列:


        由观察可以看出,此序列每过九个数字循环一次,可以看错是逢九进"一"。所以,进一步可以联想到,这个序列不过是一个“变异”的九进制序列,只不过用新符号023456789取代了正常九进制序列中的012345678。由此可以想到,解题办法就是先按正常的九进制转换将一个正常的计数数字转换为九进制,然后再替换为此“变异”的九进制序列中所用的符号。

        到这儿应该理解,数字并不一定是数字本身,它仅仅是个符号,可以在人为的规定下,改变它所代表的含义。


源码示例 & 结果展示



小结

        还有一种解法是每遇到一个数,就判断其中是否包含1,如果包含1,则舍弃,不算入计数序列。这样写的缺点是程序运行的时间复杂度会很大。

        理解数字只是个符号,不要看到1就想到1,如果愿意,完全可以将1表示为任何数。


▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值