我的想法:本题的关键在于找出板块下降的距离。用一个15行10列数组接收初始的方格图;然后定义一个4行4列数组接收板块,板块里四个方块的所在行(指的是在板块里对应的行)和所在列(指的是在最终输出方块图里所在的行)分别用两个一位数组接收。又因为初始方块图的前四行均没有方块,所以只需算出板块刚好完全落入方格图是四个方块距离还需下降的距离就好。
//CCF俄罗斯方块
package test;
import java.util.Scanner;
public class Test4 {
/**
* @param args
*/
public static void main(String[] args) {
// 用一个15行10列数组接收初始的方格图
Scanner sc=new Scanner(System.in);
int[][] fangge=new int[15][10];
for (int i = 0; i < 15; i++) {
for (int j = 0; j < 10; j++) {
fangge[i][j]=sc.nextInt();
}
}
//然后定义一个4行4列数组接收板块
int[][] bankuai=new int[4][4];
for (int i = 0; i < 4; i++) {
for (int j = 0; j <4; j++) {
bankuai[i][j]=sc.nextInt();
}
}
int column=sc.nextInt();
/*板块里四个方块的所在行(指的是在板块里对应的行)
和所在列(指的是在最终输出方块图里所在的行)分别用两个一维数组接收*/
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(bankuai[i][j]==1){
x[z]=i;
y[z]=column-1+j;
z++;
}
}
}
/*初始方块图的前四行均没有方块,所以只需算出板块刚好完全落入方格图是四个方块距离还需
*下降的距离就好*/
int[] distance=new int[4];
for (int i = 0; i < distance.length; i++) {
distance[i]=3-x[i];
}
for(int j=0;j<4;j++){
a:for(int i = 4; i<15; i++){
if(fangge[i][y[j]]==0){
distance[j]++;
}else
break a;
}
}
//算出最小距离所对应的下标
for(int j = 0; j<4; j++ ){
if(distance[0]>distance[j]){
distance[0]=distance[j];
}
}
int min=distance[0];
for (int m = 0; m<4; m++) {
fangge[x[m]+min][y[m]]=1;
}
//最终的方格图
for (int i = 0; i < 15; i++) {
for (int j = 0; j < 10; j++) {
System.out.print(fangge[i][j]+" ");
}
System.out.println("");
}
}
}