美文网首页
CCF201604-2 俄罗斯方块(JAVA版)

CCF201604-2 俄罗斯方块(JAVA版)

作者: 巨鹿lx | 来源:发表于2020-03-20 22:22 被阅读0次
import java.util.Arrays;
import java.util.Scanner;

public class Main{
    static int s;
    static int a[][] = new int[15][10];
    static int m[][] = new int[4][4];
    static int f1[] = new int[4];
    static int f2[] = new int[10];
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        for(int i = 0 ; i < 15; i ++) {
            for(int j = 0; j < 10; j++) {
                a[i][j] = scanner.nextInt();
                if(a[i][j]==1&&f2[j]==0) f2[j] = i;//求出大图形的底边,只更新遇到的第一个
            }
        }
        for(int i = 0 ; i < 10;i++) {
            if(f2[i]==0) f2[i] = 15;//未更新的设为15
        }
        Arrays.fill(f1, -1);
        for(int i = 0 ; i < 4 ; i ++) {
            for(int j = 0 ; j < 4 ;j ++) {
                m[i][j] = scanner.nextInt();
                if(m[i][j]==1) f1[j] = i;//求出小图形的底边,一直更新直到最后
            }
        }
        s = scanner.nextInt();
        down();
        for(int i = 0 ; i < 15; i ++) {
            for(int j = 0; j < 10; j++) {
                System.out.print(a[i][j]+" ");
            }
            System.out.println();
        }
    }
    private static void down() {
        int min = 0x3f3f3f3f;
        for(int i = 0 ; i < 4; i++) {
            if(f1[i]==-1) continue;//小图i列没有1,不参与计算最小值
            min = Math.min(min, f2[s+i-1]-f1[i]-1);
        }//找出两个图形底边距离的最小值
        for(int i = min,t = 0; t<4&&i<15; i++,t++) {
            for(int j = s-1,p = 0; p < 4;p++,j++) {
                a[i][j] += m[t][p];
            }
        }//最后把小图形覆盖上去
    }
}

相关文章

网友评论

      本文标题:CCF201604-2 俄罗斯方块(JAVA版)

      本文链接:https://www.haomeiwen.com/subject/laasyhtx.html