这篇帖子的灵感来自于Puzzling。这个难题的破坏者在下面。
给定三个正整数作为输入,(x, y, z)
构造包含范围[x, y]
,将该范围连接在一起,然后删除z
不必要的连续数字以产生可能的最大和最小正整数。不允许前导零(即,数字必须以开头[1-9]
)。以任意顺序输出这两个数字。
对于Puzzling帖子中的示例,对于input (1, 100, 100)
,最大可能的数字是99999785960616263646566676869707172737475767778798081828384858687888990919293949596979899100
,
而最小的数字是10000012340616263646566676869707172737475767778798081828384858687888990919293949596979899100
,
遵循jafe在此处发布的答案的以下逻辑:
- 我们不能影响数字的长度(有固定的数字位数),因此要使值最大化,我们采用最大的第一位数字,然后选择第二位数字等。
- 删除84个第一个非昵称(要删除的剩余16位数字):
999995051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
- 接下来的17位数字中最大的数字是7,因此从此处开始,答案中的第二位数字最多为7(我们不能删除超过16位的数字)。因此,删除15个非7的...(剩下1个数字以删除):
999997585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
- 从这里开始,下一位数字最多为8,因此从中间去除一个非8的数字:
99999785960616263646566676869707172737475767778798081828384858687888990919293949596979899100
- 逻辑类似,但取反(即,我们希望前导
1
s而不是前导9
s)的最小数字。
这是一个较小的示例:(1, 10, 5)
。
我们构造范围12345678910
并确定5
可以删除的位数,以保留最大可能的数字。显然,这意味着我们要最大化前导位数,因为我们不能影响输出的长度。因此,如果我们删除12345
,我们将剩下678910
,这就是我们可以做的最大的事情。最小化是有点棘手的,因为我们可以取中间的数字,而123410
尽可能保留最小。
对于(20, 25, 11)
,结果相当无聊,因为5
和1
。
最后,排除答案试图前导零,(9, 11, 3)
使91011
这反过来产量91
和10
作为最大和最小的。
I / O和规则
9, 11, 3
这样做是可以的。