【发布时间】:2020-08-18 18:36:35
【问题描述】:
考虑伪代码:
read n (non-zero natural number)
x <- 1
y <- n
d <- 2
while x < y
{
if n % d = 0
{
x <- d
y <- [n / d]
}
d <- d + 1
}
if x = y
{
write 'D', x
}
else
{
write 'N'
}
我必须修改这个伪代码,使其中没有循环,所以我必须摆脱顶部的那个 while 循环。我查看了一些示例,即数字{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100} 和代码导致显示N 的数字{2, 3, 5, 6, 7, 8} 和{1, 4, 9, 100} 它显示D 后跟它们各自的平方根(分别为{1, 2, 3, 10})。
所以我得出结论,只有当n 是一个完美的平方时,代码才会输出D,然后它显示它的平方根。对于不是完全平方的数字,它会输出N。
这意味着我必须更改上面的伪代码,以便它检查数字n 是否是一个完美的正方形。但是我怎么能在不使用任何循环的情况下做到这一点呢?特别是因为这是伪代码,所以我没有像sqrt(n) 这样的函数。我从一个通常有简单问题的来源得到这个练习,所以它一定是一些我看不到的简单的东西,没有什么复杂的。但是我看不到任何使用给定变量的方法,或者创建新变量来检查给定数字n 是否是没有任何循环的完美正方形。
【问题讨论】:
-
我不同意您在伪代码中没有
sqrt(n)。我实际上会声称你有任何你想要的操作。所以你的分析很有意义,我认为预期的解决方案确实只是取平方根并检查它是否为整数。但当然很难确定提问者的意图是什么。 -
你可以通过调用函数或使用for循环来检查一个数字是否是sqrt......你不能同时忽略这两者......
-
问题相当于用未指定的语言编写一些代码。如果没有关于语言是什么以及什么是循环的详细信息,就无法真正回答。也许
if exists(x natural number) such that x*x == n then write 'D', x else write 'N'。或者使用递归,或者使用内置整数平方根...
标签: algorithm pseudocode perfect-square