import java.util.Scanner; public class Gamers { static int num=1; static void color(int x, int y, int a[][], int size, int leftTopX, int leftTopY) { int maxX = leftTopX + size - 1; int maxY = leftTopY + size - 1; int midX = (maxX + leftTopX) / 2; int midY = (maxY + leftTopY) / 2; if (size == 1) { return; }if (x <= midX && y <= midY) { a[midX][midY + 1] = num; a[midX + 1][midY + 1] = num; a[midX + 1][midY] = num; num++; color(x, y, a, size / 2, leftTopX, leftTopY); color(midX, midY + 1, a, size / 2, leftTopX, midY + 1); color(midX + 1, midY, a, size / 2, midX + 1, leftTopY); color(midX + 1, midY + 1, a, size / 2, midX + 1, midY + 1); } else if (x <= midX && y > midY) { a[midX][midY] = num; a[midX + 1][midY] = num; a[midX + 1][midY + 1] = num; num++; color(midX, midY, a, size / 2, leftTopX, leftTopY); color(x, y, a, size / 2, leftTopX, midY + 1); color(midX + 1, midY, a, size / 2, midX + 1, leftTopY); color(midX + 1, midY + 1, a, size / 2, midX + 1, midY + 1); } else if (x > midX && y <= midY) { a[midX][midY] = num; a[midX][midY + 1] = num; a[midX + 1][midY + 1] = num; num++; color(midX, midY, a, size / 2, leftTopX, leftTopY); color(midX, midY + 1, a, size / 2, leftTopX, midY + 1); color(x, y, a, size / 2, midX + 1, leftTopY); color(midX + 1, midY + 1, a, size / 2, midX + 1, midY + 1); } else if (x > midX && y > midY) { a[midX][midY + 1] = num; a[midX][midY] = num; a[midX + 1][midY] = num; num++; color(midX, midY, a, size / 2, leftTopX, leftTopY); color(midX, midY + 1, a, size / 2, leftTopX, midY + 1); color(midX + 1, midY, a, size / 2, midX + 1, leftTopY); color(x, y, a, size / 2, midX + 1, midY + 1); }}public static void add(int a[][], int size,int x,int y) { int flag = 1; out: for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { if (a[i][j] == 0 && (i != x && j != y)) { System.out.print(-1); flag = 0; break out; }}}if (flag == 1) { for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { System.out.print(a[i][j] + " "); } System.out.println(); }}}public static void main(String[]args){ int i; int size=1; Scanner sc=new Scanner(System.in); int a= Integer.parseInt(sc.nextLine()); for(i=0;i<a;i++){ size=size*2; }String s1 = sc.nextLine(); String []s2 = s1.split(" "); int x= Integer.parseInt(s2[0]); int y= Integer.parseInt(s2[1]); int [][] b =new int [size][size]; b[x-1][y-1]=0; color(x-1,y-1,b,size,0,0); add(b,size,x-1,y-1); }}的计算复杂度
时间: 2024-04-28 22:25:14 浏览: 17
该程序的计算复杂度为O(N^2),其中N为棋盘的大小。在color函数中,每次都会将棋盘分成四个子棋盘,因此递归树的深度为logN,而每层递归中都需要遍历整个棋盘,因此总的计算复杂度为O(N^2 * logN)。在add函数中,需要遍历整个棋盘来查找可以放置棋子的位置,因此复杂度为O(N^2)。综合起来,程序的总计算复杂度为O(N^2 * logN)。
相关问题
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int b = sc.nextInt(); int temp = a; a = b; b = temp; System.out.println(a + " " + b); } }解析
这是一段Java代码,实现了从控制台读入两个整数a和b,然后交换它们的值,并输出交换后的结果。具体解析如下:
1. `import java.util.Scanner;`:这是一个Java语句,用于引入Scanner类,该类可以从控制台读入用户输入的数据。
2. `public class Main { ... }`:这是一个Java类的定义,类名为Main,它包含一个main方法,是Java程序的入口点。
3. `Scanner sc = new Scanner(System.in);`:这是一个Java语句,创建了一个Scanner对象sc,它的作用是从控制台读入用户输入的数据。
4. `int a = sc.nextInt();`:这是一个Java语句,使用Scanner对象sc从控制台读入一个整数,并将其赋值给变量a。
5. `int b = sc.nextInt();`:这是一个Java语句,使用Scanner对象sc从控制台读入另一个整数,并将其赋值给变量b。
6. `int temp = a;`:这是一个Java语句,创建一个变量temp,将变量a的值赋给它,实现了值的交换。
7. `a = b;`:这是一个Java语句,将变量b的值赋给变量a,实现了值的交换。
8. `b = temp;`:这是一个Java语句,将变量temp的值赋给变量b,实现了值的交换。
9. `System.out.println(a + " " + b);`:这是一个Java语句,使用System.out.println方法输出变量a和b的值,中间用空格分隔。
import java.util.stream.IntStream; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int a = in.nextInt(); int b = in.nextInt(); int[] r = IntStream.range(a, b). filter( ). toArray(); for ( int x : r ) { System.out.print(x+" "); } System.out.println(); in.close(); } }
这段代码中,缺少 `filter()` 方法的实现。根据题意,我们需要筛选出 [a,b) 之间的所有完全数。
可以使用 lambda 表达式来实现 `filter()` 方法。具体来说,我们可以使用 `IntStream.range(a, b)` 得到一个从 `a` 到 `b-1` 的整数流,然后在流上使用 `filter()` 方法,传入一个 lambda 表达式,用来判断一个整数是否为完全数。如果是,则该整数被保留在流中,否则被过滤掉。最后使用 `toArray()` 方法将流转换为一个整数数组。
在 lambda 表达式中,我们可以利用 `isPerfect()` 方法来判断一个整数是否为完全数。`isPerfect()` 方法的实现可以参考上一个问题的解答。
修改后的代码如下:
```java
import java.util.stream.IntStream;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a = in.nextInt();
int b = in.nextInt();
int[] r = IntStream.range(a, b)
.filter(Main::isPerfect)
.toArray();
for (int x : r) {
System.out.print(x + " ");
}
System.out.println();
in.close();
}
public static boolean isPerfect(int n) {
int sum = 0;
for (int i = 1; i <= n / 2; i++) {
if (n % i == 0) {
sum += i;
}
}
return sum == n;
}
}
```
这段代码中,我们将 `isPerfect()` 方法定义为静态方法,并使用 `Main::isPerfect` 的方式将其作为 lambda 表达式传入到 `filter()` 方法中。在 `isPerfect()` 方法中,我们使用与上一个问题相同的方法来计算一个整数的因子之和。如果该和等于该整数,则返回 `true`,否则返回 `false`。
相关推荐
![text/x-java](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)