我正在尝试过去的竞赛题,并被困在这个问题上。解决方案公开了,但我似乎还是不明白他们是如何得出解决方案逻辑的。
问题:
喵对数字着迷。有一天,他在课堂上感到无聊,开始在课本上记下数字。没有特殊原因,他只写下3位数或以上的数字,记为N 。他砍掉数字的最后一位数字,然后组成一个新数字,M 。然后他进行了一个数学运算:S=N−M ,然后他告诉你S .
后来你发现数字N 实际上是一个超级神奇的数字,它是生命、宇宙和一切的答案。你能算出数字吗?
输入: 第一行包含一个整数 t (1≤t≤1000) – 测试用例的数量。
每个测试用例包含一个正整数 S (100≤S≤1017)
输出: 对于每个测试用例,输出一行包含 N 的可能值 。如果存在多个可能的值,则按升序输出所有值,并用一个空格分隔。
示例
inputCopy
3
100
500
1800
outputCopy
111
555
1999 2000
解决方案:
t = int(input())
for _ in range(t):
n = int(input())
last_digit = n % 9
x = (n - last_digit) // 9
if last_digit == 0:
print((x - 1) * 10 + 9, x * 10)
else:
print(x * 10 + last_digit)
有谁知道 9 与这些输入有什么关系?就像找出这个解决方案的思维过程是什么?
我们有一个未知的
N
,它的最后一位数字
L = N % 10
和
M = N // 10
鉴于
S = N - M
接下来
N = 10 * M + L
我们可以写:
S = 10 * M + L - M = 9 * M + L
所以
M = S // 9
L = S % 9
和
N = 10 * M + L = 10 * S // 9 + S % 9
这就是OP码中
9
的由来。