Java 用队列计算序列
Java Calculate Sequence with Queue
我有以下数字序列:
S1 = N, S2 = S1 + 1, S3 = 2*S1 + 1, S4 = S1 + 2, S5 = S2 + 1, S6 = 2*S2 + 1, S7 = S2 + 2 ...
使用 ArrayDeque<E>
class,我必须编写一个程序来打印给定 N
的前 50
个成员。
示例:
input 2
output 2 3 5 4 4 7 5 6 11 7 5 9 6 ...
这是我的代码。问题是我无法更新下一个 S
import java.util.ArrayDeque;
import java.util.Queue;
import java.util.Scanner;
public class p04 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int numN = scanner.nextInt();
scanner.close();
int counter = 1;
int nexS = numN;
Queue<Integer> fifty = new ArrayDeque<>();
for (int i = 0; i < 50; i++) {
if (i == 0){
fifty.add(numN);
}else {
if (counter == 1){
counter++;
numN = nexS + 1;
fifty.add(numN);
}else if (counter == 2){
counter++;
numN = (nexS * 2) + 1;
fifty.add(numN);
}else {
counter = 1;
numN = nexS +2;
fifty.add(numN);
nexS = nexS + 1;
}
}
}
for (Integer integer : fifty) {
System.out.print(integer + " ");
}
}
}
按照你解决这个问题的方式,用 ArrayList 更容易解决。我认为我的解决方案更面向队列,这是你的任务。所以这是我的看法:
import java.util.ArrayDeque;
import java.util.Scanner;
public class SequenceQuestion {
public static void constructSequence(int start, int seqLength) {
ArrayDeque<Integer> queue = new ArrayDeque<>();
queue.add(start);
System.out.print(start);
for (int i = 0; i < seqLength - 1; i++) {
int print = 0;
if (i % 3 == 0 && i != 0) queue.remove();
if (i % 3 == 0) {
print = queue.peek() + 1;
queue.add(print);
} else if (i % 3 == 1) {
print = queue.peek() * 2 + 1;
queue.add(print);
} else if (i % 3 == 2) {
print = queue.peek() + 2;
queue.add(print);
}
System.out.print(", " + print);
}
}
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
constructSequence(s.nextInt(), 50);
}
}
您不需要计数器,因为您已经有了一个 (i
),如果您总是在开头检查 mod 3,如果等于 0,则从队列中删除第一个元素.我看到这是你遇到问题的地方。
我有以下数字序列:
S1 = N, S2 = S1 + 1, S3 = 2*S1 + 1, S4 = S1 + 2, S5 = S2 + 1, S6 = 2*S2 + 1, S7 = S2 + 2 ...
使用 ArrayDeque<E>
class,我必须编写一个程序来打印给定 N
的前 50
个成员。
示例:
input 2
output 2 3 5 4 4 7 5 6 11 7 5 9 6 ...
这是我的代码。问题是我无法更新下一个 S
import java.util.ArrayDeque;
import java.util.Queue;
import java.util.Scanner;
public class p04 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int numN = scanner.nextInt();
scanner.close();
int counter = 1;
int nexS = numN;
Queue<Integer> fifty = new ArrayDeque<>();
for (int i = 0; i < 50; i++) {
if (i == 0){
fifty.add(numN);
}else {
if (counter == 1){
counter++;
numN = nexS + 1;
fifty.add(numN);
}else if (counter == 2){
counter++;
numN = (nexS * 2) + 1;
fifty.add(numN);
}else {
counter = 1;
numN = nexS +2;
fifty.add(numN);
nexS = nexS + 1;
}
}
}
for (Integer integer : fifty) {
System.out.print(integer + " ");
}
}
}
按照你解决这个问题的方式,用 ArrayList 更容易解决。我认为我的解决方案更面向队列,这是你的任务。所以这是我的看法:
import java.util.ArrayDeque;
import java.util.Scanner;
public class SequenceQuestion {
public static void constructSequence(int start, int seqLength) {
ArrayDeque<Integer> queue = new ArrayDeque<>();
queue.add(start);
System.out.print(start);
for (int i = 0; i < seqLength - 1; i++) {
int print = 0;
if (i % 3 == 0 && i != 0) queue.remove();
if (i % 3 == 0) {
print = queue.peek() + 1;
queue.add(print);
} else if (i % 3 == 1) {
print = queue.peek() * 2 + 1;
queue.add(print);
} else if (i % 3 == 2) {
print = queue.peek() + 2;
queue.add(print);
}
System.out.print(", " + print);
}
}
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
constructSequence(s.nextInt(), 50);
}
}
您不需要计数器,因为您已经有了一个 (i
),如果您总是在开头检查 mod 3,如果等于 0,则从队列中删除第一个元素.我看到这是你遇到问题的地方。