以下是面试问题......你怎么能开始解决这类问题?是否存在针对此类问题的通用算法?
问题是解释这种方法的作用。我知道她为我尝试的一些输入提供了什么(而且没关系),但我真的不知道如何开始解决这类问题......
public boolean what (int num)
{
boolean ans = true;
for (int x = 2; (x*x <= num) && ans; x=x+1)
{
if ((num % x) == 0)
ans = false;
}
return ans;
}
thx!
答案 0 :(得分:2)
让num = 10
public boolean what (int num)
{
boolean ans = true;
for (int x = 2; (x*x <= num) && ans; x=x+1)
{ //^ multiply x with x will give (4,9).. When x = 4, than (16<= num) = false
if ((num % x) == 0) // divide 10 by (2,3) if reminder is zero that means 10 is not prime
ans = false; // set ans to false so that for loop can be terminated or just break;
}
return ans;
}
答案 1 :(得分:1)
检查num
是否为素数。
要找出方法的作用,请阅读代码并尝试了解它的作用。您也可以尝试一些输入。对于好的代码,变量和方法的名称也有很大帮助(这里不是这种情况)。
但是,如果该方法实现了一个您不知道的算法,并且您不知道正在解决的问题的上下文,那么您可能永远不会知道它的作用。
答案 2 :(得分:1)
您可以遵循反向engeering过程,提供一些示例输入并获取您可以确定结果的输出。
明智地选择您的输入,以便轻松解决问题。
在目前的情况下 -
输入:1返回:true
输入:2返回:真实
输入:3返回:真实
输入:4返回:假
输入:5返回:真实
...
输入:9返回:false //aha...it似乎是素数
...
输入:111返回:错误
所以在这种情况下它的素数逻辑。
答案 3 :(得分:1)
你可以找到它运行带有几个随机输入的方法,
并尝试找出您提供的INPUT
和出现的OUTPUT
之间的关系。
在得出结论之前,先检查一下“已知输出”然后再声明你的答案。
答案 4 :(得分:1)
在上述程序中,最初假设数字不是素数。如果任何大于2且小于或等于数字平方根的数字除以给定数字,则该数字不是素数。
如果数字不是素数,则该方法返回true,如果数字是素数,则返回false。
答案 5 :(得分:0)
方法的目的:找出素数。
如果输入数字是素数,则此方法给出booleaan ans ='true'的输出。 否则它返回false值。
根据最简单的逻辑来确定数字是否为素数。
例如,如果数字是11, 第1步 - 我们将它乘以num(num * num)小于11. {无需测试超出值大于num * num,因为所有可能的情况都经过测试}。
步骤2 - 检查除以11/2的余数是否为零,如果余数不为0则11则不是素数。如果它除以我们返回步骤1
所以循环将是......
步骤1 num = 11,x = 2
步骤2 11%2!= 0所以转到步骤1,num不可分割
步骤1 num = 11,x = 3
Step2 11%3!= 0
步骤1 num = 11,x = 4但x * x = 16且16> 11所以没有更多的循环,11是素数,因为它不能被任何数字整除,直到x = 3。另一个例子可以是38 .. 步骤1数38,x = 2
步骤2 38%2 == 0,因此余数= 0且ans = false因此不再循环,'38'不是素数。
一种更先进的方法来寻找一个数字,如果它的素数与否可能只是针对质数来测试它的可分性。这实际上是更有效的,如果我们有更大的数字作为输入。
public boolean what (int num) // number to be tested is passed
{
boolean ans = true; // default value
for (int x = 2; (x*x <= num) && ans; x=x+1) //looping till num is found divisibl
{
if ((num % x) == 0)
ans = false; // ans is false in case num is not prime
}
return ans; // num is prime
}
希望解释有所帮助..如果有任何疑问或帮助,请给我留言。