模数数学题 - 竞争性编程

问题描述 投票:0回答:1

我正在尝试过去的竞赛题,并被困在这个问题上。解决方案公开了,但我似乎还是不明白他们是如何得出解决方案逻辑的。

问题:

喵对数字着迷。有一天,他在课堂上感到无聊,开始在课本上记下数字。没有特殊原因,他只写下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 与这些输入有什么关系?就像找出这个解决方案的思维过程是什么?

math numbers modulo
1个回答
0
投票

我们有一个未知的

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
的由来。

© www.soinside.com 2019 - 2024. All rights reserved.