有一个未知函数的代码:
function Magic(number)
r = number mod 2
print r
if number > 1
Magic(number / 2)
(用伪代码编写)
问题是:应该传递什么整数才能收到以下答案
0 1 1 0 0 1
主要问题是我无法弄清楚mod在伪代码中是如何工作的。 应该5,5 mod 3 = 2.5或2
答案 0 :(得分:1)
除此之外,除法和mod操作都应该接受和输出整数。 “5.5 mod 3”f.e。没有任何意义。并且11/2(整数除法)将返回5,而不是5.5。
这是一个实现伪代码的PHP程序:
<?php
function Magic($number) {
$r = $number % 2;
echo $r . ' ';
if ($number > 1) Magic($number / 2);
}
for ($i = 16; $i < 34; ++$i) {
echo "($i: ";
Magic($i);
echo ") ";
}
echo "\n";
输出结果:
(16: 0 0 0 0 1 ) (17: 1 0 0 0 1 0 ) (18: 0 1 0 0 1 0 ) (19: 1 1 0 0 1 0 ) (20: 0 0 1 0 1 0 ) (21: 1 0 1 0 1 0 ) (22: 0 1 1 0 1 0 ) (23: 1 1 1 0 1 0 ) (24: 0 0 0 1 1 0 ) (25: 1 0 0 1 1 0 ) (26: 0 1 0 1 1 0 ) (27: 1 1 0 1 1 0 ) (28: 0 0 1 1 1 0 ) (29: 1 0 1 1 1 0 ) (30: 0 1 1 1 1 0 ) (31: 1 1 1 1 1 0 ) (32: 0 0 0 0 0 1 ) (33: 1 0 0 0 0 1 0 )
这表明任何整数(x: 0 1 1 0 0 1 )
都不可能得到6位数结果x
(因为输出字符串单调增长)。但是,Magic(38)是0 1 1 0 0 1 0
- 带有所需字符串的第一个7位数结果,但也有一个尾随零。
对于负整数值,可能只有2个输出为“0”和“-1”。
答案 1 :(得分:0)
mod
为您提供整数除法的余数。几个例子:
应该省略小数部分。在大多数语言中,它取决于数字的数据类型(如果两个操作数都是整数,某些语言会进行整数除法,这可能也是你应该做的,所以5/2 = 2)。
关于你的第一个问题(剧透警报!,请在阅读本文之前亲自试一试!),从结尾开始,每一步乘以2。如果该步骤中的数字应为1
,也请添加1。
所以,最后一步是1.从1
开始:
等等。我可以给你正确答案,但我认为如果你亲自尝试它会更好; - )
答案 2 :(得分:0)
首先,这是此问题的可执行python代码。
def Magic(number):
r = number % 2
print r
if number > 1:
Magic(number / 2)
Magic(15)
但是,此问题的模式是函数返回给定输入数的REVERSE二进制数。因此,在这种情况下,最简单的解决方案是取0 1 1 0 0 1,将其反转为100110,并计算该二进制数的值,即32 + 4 + 2 = 38.使用此方法,您可以计算任何给定输入的所需数量或预期输出。