这是我的第一个问题,所以我希望它顺利进行。
背景:
您可能正在考虑的不是河流。问题围绕数字河流的概念展开。数字河流是数字的序列,其中数字以下n
是n
加上其数字的总和。
说明:
12345后跟12360,因为1 + 2 + 3 + 4 + 5 = 15,所以12345 + 15给出12360。类似地145后跟155。如果数字河的第一个数字,M
我们将其称为河M
。
例如:河480是从{480,492,507,519 ....}开始的序列,河483是从{483,498,519,....}开始的序列。正常的河流和河流可以汇合,数字河流也是如此。当两条数字河流共享一些相同的值时,就会发生这种情况。
例:
河480在519与河483相遇。河480在507与河507相遇,而从不与河481相遇。每条数字河最终都会与河1,河3或河9相遇。
编写一个程序,该程序可以为给定的整数确定n
河流n
首先遇到这三条河流之一的值。
输入项
输入可能包含多个测试用例。每个测试用例都占一行,并包含一个整数n
(1 <= n <= 16384
)。值为0
for的测试用例将n
终止输入,并且不得对该测试用例进行处理。
输出量
对于输入中的每个测试用例,首先输出测试用例编号(从1开始),如示例输出中所示。然后在单独的行输出中,行“首先在y处遇到河x”。y是河流n
首先与河流相遇的最小值x
(x = 1或3或9)。如果河流在处与河流n
相交的值大于一个值,则输出最低值。在两个连续的测试用例之间打印空白行。x
y
x
测试用例
输入:
86
12345
0
输出:
Case #1
first meets river 1 at 101
Case #2
first meets river 3 at 12423
得分:
最快的算法获胜。如果是平局。较短代码的将获胜。
感谢mbomb007指出我的错误。
ps:我想拥有最快的解决方案,而不是最小的解决方案。我也有一个慢的解决方案。为此,请看这里。
注意:
我将使用它进行代码测试。以及性能检查。
M
我们将其称为河M
”是没有道理的,原因有两个:第一,如果河是无穷的数字序列,那么它就没有最后一位数字;其次,在下一段中,河流M
表示从数字开始的河流M
。