从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;
}
}