从1打到13
public class Main {
public static void main(String[] args) {
new Main();
}
public Main() {
for (int i = 1; i < 14; i++) {
System.out.println(i + "\t" + exec(i));
}
}
public int exec(int n) {
for (int i = 0;; i += n + 1) {
if (check(n, n + 1 + i)) {
return n + 1 + i;
}
if (check(n, n + 2 + i)) {
return n + 2 + i;
}
}
}
public boolean check(int n, int k) {
int length = 2 * n;
int begin = 0;
for (int i = 0; i < n; i++) {
begin = (begin + k - 1) % (length - i);
if (begin < n) {
return false;
}
}
return true;
}
}
1 2
2 7
3 5
4 30
5 169
6 441
7 1872
8 7632
9 1740
10 93313
11 459901
12 1358657
13 2504881
通过的1012
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int[] a = new int[] { 2, 7, 5, 30, 169, 441, 1872, 7632, 1740, 93313, 459901, 1358657, 2504881 };
Scanner s = new Scanner(System.in);
int num;
while ((num = s.nextInt()) != 0) {
System.out.println(a[num - 1]);
}
s.close();
}
}
超时的1012
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
new Main();
}
public Main() {
Scanner s = new Scanner(System.in);
int num;
while ((num = s.nextInt()) != 0) {
System.out.println(exec(num));
}
s.close();
}
public int exec(int n) {
int i = n + 1;
while (true) {
if (check(n, i)) {
return i;
}
i++;
if (check(n, i)) {
return i;
}
i += n;
}
}
public boolean check(int n, int k) {
int length = n << 1;
int begin = 0;
for (int i = 0; i < n; i++) {
begin = (begin + k - 1) % (length - i);
if (begin < n) {
return false;
}
}
return true;
}
}
本文介绍了一个有趣的Java程序挑战,该挑战要求计算从1到13的一个特殊序列,序列中的每个元素都需满足特定条件。通过两种不同的实现方式对比,一种是预先计算并存储结果,另一种则是每次运行时动态计算,展示了算法效率的重要性。
1万+

被折叠的 条评论
为什么被折叠?



