此题,猛滴一看确实非常容易让人懵懵的,主要是题目描述的非常不清晰,很难让人能够透彻的理解。
如果连题目都看不懂,那就不谈写出代码了。
- 题目描述
官方题目描述:题目地址
- 题目解读
关键的是要理解题目
- Java题解
import java.util.Scanner;
/**
* 遇见这样的复杂图像题目
* 不要慌,先想办法将图片以合适的方式,完整的录入进来再说
* @author wangdong
*
*/
public class Main {
public static void main(String[] args) {
Main.run();
}
public static void run() {
Scanner scanner = new Scanner(System.in);
int[][] arr = new int[15][10];
int[][] arrSqu = new int[4][4];
//将输入的方格图存入数组
for (int i = 0; i < 15; i++) {
for (int j = 0; j < 10; j++) {
arr[i][j] = scanner.nextInt();
}
}
//将输入的方块存入数组
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
arrSqu[i][j] = scanner.nextInt();
}
}
//获取方块将要下沉的位置,偏移
int column = scanner.nextInt();
scanner.close();
//获取这个方块值为1的每个节点在4*4矩阵中的位置
int[] x = new int[4];
int[] y = new int[4];
int z = 0;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (arrSqu[i][j] == 1) {
x[z] = i;
y[z] = j+column-1;
z++;
}
}
}
boolean flag = true;
int count = 0;
int offset = 0;
outer:
while (flag) {
for (int i = 0; i < 4; i++) {
//判断最下面的边界,如果有一个方块到了最下面,直接结束下沉
if ((x[i] + offset) == 14) {
for (int j = 0; j < 4; j++) {
arr[x[j] + offset][y[j]] =1;
}
break outer;
}
if (arr[x[i] + offset][y[i]]==0) {//不断下沉
count++;
}
}
if (count == 4) {
offset++;
count=0;
}else {
for (int i = 0; i < 4; i++) {
arr[x[i] + offset -1][y[i]] = 1;
}
flag = false;
}
}
//遍历下沉后的矩阵
for(int i=0;i<15;i++){
for(int j=0;j<10;j++){
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}
}
- 输入输出解释
好啦,祝大家工作学习进步!