5
通过重复添加2个数字来生成任何数字
您将获得一台具有两个16位寄存器的计算机,x和y。寄存器被初始化x=1和y=0。机器唯一可以执行的操作是加法65536。即: x+=y- x被替换(x + y) mod 65536; y不变 y+=x -类似地 y x+=x- x被替换2x mod 65536; 仅在x偶数时合法 y+=y -类似地 y 目标是在其中一个寄存器(x或y)中获得预定数量。 编写一个程序或子例程,该程序或子例程接收一个数字(在stdin,,argv函数参数,堆栈顶部或任何其他常规位置),并输出一个程序以获取该数字。输出应该转到任何其他常规输出设备stdout,或者(如果您的语言没有stdout)。 输出程序最多可以达到100%加上最佳值的2个步骤。也就是说,如果最短的获取目标编号的程序包含n步骤,则您的解决方案不能超过2n+2。此限制是为了避免“过于简单”的解决方案(例如,计算1、2、3,...),但不需要完全优化;我希望最短的程序最容易找到,但不能确定... 例如:输入=25。输出: y+=x x+=y x+=y x+=x x+=x x+=x y+=x 另一个示例:对于任何斐波那契数,输出具有此交替模式。对于输入= 21,输出为 y+=x x+=y y+=x x+=y y+=x x+=y y+=x 最短的代码(以字节为单位)获胜。 (这个难题的灵感来自于我最近必须生成的16位处理器的一些代码) PS:我想知道-最佳程序最长的数字是多少?