这是受到我在互联网上某个地方看到的数学问题的启发,但不记得在哪里(更新:原始问题是在数学谜语subreddit上找到的,并提供了一个证明,如果有可能,还请参见此Math SE帖子),询问证明以下过程是否可以用于任意任意整数对(据我所记得,任何给定的整数对都可以):
给定一对整数j和k,将它们中的一个加倍并将另一个相加,得到一对新的整数,即(j,k)->(j + 1,k * 2)或(j * 2,k + 1)。然后,使用那些整数重复此过程,以使一对整数相等。
这些给定的示例不一定是最佳的,但是显示了如何对正整数,负整数或零整数进行此过程:
(2, 5) -> (3, 10) -> (6, 11) -> (12, 12)
(5, 6) -> (6, 12) -> (7, 24) -> (14, 25) -> (28, 26) -> (56, 27) -> (112, 28) -> (113, 56) -> (226, 57) -> (227, 114) -> (228, 228)
(0, 2) -> (1, 4) -> (2, 5) -> (3, 10) -> (6, 11) -> (12, 12)
(-4, 0) -> (-3, 0) -> (-2, 0) -> (-1, 0) -> (0, 0)
(3, -1) -> (6, 0) -> (12, 1) -> (13, 2) -> (14, 4) -> (15, 8) -> (16, 16)
(-4, -3) -> (-8, -2) -> (-16, -1) -> (-32, 0) -> (-31, 0) -> ... -> (0, 0)
挑战
创建一个给定两个整数的程序,通过重复递增一个整数并加倍另一个整数,输出使这些整数相等所需的步骤列表
技术指标
- 该解决方案不一定是最优的,但对于任意对,它必须以有限数量的步骤进行求解
输入必须是两个整数
输出可以是任何合理的输出,可以清楚地表示每个步骤的结果整数,例如:
- 具有两个不同定界符(任何符号,空格等)的字符串,一个用于一对中的每个整数,每个用于一对中的一个
- 例如,输入j,k:2,5->输出:3,10; 6,11; 12,12
- 整数列表的列表
- 例如输入j,k:2,5->输出:[[3,10],[6,11],[12,12]]
- 具有两个不同定界符(任何符号,空格等)的字符串,一个用于一对中的每个整数,每个用于一对中的一个
如果输入是一对相等的数字,则可以输出任何东西,只要它与其他非平凡答案一致
- 例如
- 如果输入[2,5]具有不包含输入对的输出[[3,10],[6,11],[12,12]],则输入[4,4]应该什么也不输出。
- 如果输入[2,5]具有输出[[2,5],[3,10],[6,11],[12,12]],但确实包含输入对,则输入[4,4]应该输出[[4,4]]。
- 例如
适用标准IO方法,禁止标准漏洞
这是代码高尔夫球,所以最短答案以字节为单位
[(12,12),(6,11),(3,10),(2,5)]
输入(2,5)
?