题目地址:http://www.cspro.org
(本题为CCF计算机职业资格认证第七次测试题目)
一、本题思路:
首先要明确,本题只需要考虑板块图案所在的四列,不必考虑其余几列。求出四列中每一列的“距离”,即该列下落板块中最下一个方块(下界)与该列已存在方块中最上 一个方块(上界)的“距离”。四列中以最短的距离所在列为基准,求出这个最短距离。于是这个4*4方块中所有为1的方格均“下落”这个最短距离。
二、遇到的问题:
主要是求“上界”时循环条件写错,导致出错,浪费了大量时间。
三、源代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int [][] s = new int[15][10];
for(int i = 0; i < 15; i++){
for(int j = 0 ; j < 10; j++){
s[i][j] = sc.nextInt();
}
}
int [][] t = new int[4][4];
for(int i = 0 ; i < 4; i++){
for(int j = 0; j < 4; j++){
t[i][j] = sc.nextInt();
}
}
int x = sc.nextInt();
x--;
//get height difference of each column
int minColumn = 0;
int minValue = 16;
for(int i = 0; i < 4; i++){
//shangjie
int sj = -1;
for(int j = 0; j < 4; j++){
if(t[j][i] == 1)
sj = j;
}
//height difference
if(sj == -1)
continue;
//xiajie
int xj = 15;
for(int j = 0; j < 11; j++){
if(s[14 - j][x + i] == 1){
xj = 14 - j;
}
}
if(xj - sj < minValue){
minColumn = x + i;
minValue = xj - sj;
}
}
for(int i = 0 ; i < 4; i++){ //column
for(int j = 0; j < 4; j++){ //row
if(t[j][i] == 1){
s[j + minValue - 1][i + x] = 1;
}
}
}
for(int i = 0; i < 15; i++){
for(int j = 0 ; j < 10; j++){
System.out.print(s[i][j] + " ");
}
System.out.println();
}
}
}