1 年,8 月
Questions & Answers
4304
import java.util.Stack;
public class Primes{
public static void main(String[]args){
Stack<Integer> stack = new Stack<Integer>();
stack.push(null);
//number of primes to display
final int NUMBER_OF_PRIMES = 50;
//number of primes to display per line
final int NUMBER_OF_PRIMES_PER_LINE = 10;
//count number of primes
int count = 0;
int number = 2;
System.out.println("The first 50 primes are \n");
while(count < NUMBER_OF_PRIMES){
boolean isPrime = true;
for(int divisor = 2; divisor <= number/2; divisor++){
if(number % divisor == 0){
isPrime = false;
break;
}
}
if(isPrime){
count++;
if(count % NUMBER_OF_PRIMES_PER_LINE ==0){
System.out.println(number);
}
else
System.out.print(number + " ");
}
number++;
}
}
}
# 1 楼答案
首先,看看Finding prime numbers with the Sieve of Eratosthenes (Originally: Is there a better way to prepare this array?),讨论寻找素数的更好方法。然后,根据“后进先出”属性,使用堆栈反转顺序
# 2 楼答案
注意:Stack是一个旧类,不应该再使用了。你应该更喜欢ArrayList
# 3 楼答案
堆栈的一个有趣特性是,它可以用来反转顺序。这是因为第一个推到上面的物品是最后一个
想象一下,如果我把单词“pan”的字母一个接一个地推到一堆上。我先按“p”,然后按“a”,再按“n”。现在,因为“n”是最后一个被按下的字母,所以它是第一个从堆栈中弹出的字母。所以,当我删除这些字母时,我会得到“n”,后面跟着“a”,后面跟着“p”-“nap”。通过这种方式,堆栈可以通过将单词视为字符列表来反转单词
对于素数列表也是如此。如果你有一个按升序排列的前
NUMBER_OF_PRIMES
素数列表(例如:2,3,5,7…),然后,您可以使用堆栈执行相同的技巧,将列表按降序的顺序进行更改,方法是将每个列表按到堆栈上,然后读取它们所以,我要做的是,每次你检测到一个素数,把它推到你的堆栈上,直到堆栈上有
NUMBER_OF_PRIMES
个素数。然后,将每个项目从堆栈中弹出,以相反顺序打印一旦运行起来,将
isPrime
逻辑拆分为自己的函数也可能是值得的# 4 楼答案
因为这是一个家庭作业问题,我不会给出代码,但这里有一个过程,从代码中的某个地方开始
number
是prime,则将其推到堆栈上李>