考试完才发现两处小错误,好亏。。。下面是修改好的,应该是对的吧→_→ 

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        while (sc.hasNext()) {

            int RED = 0, GREEN = 1, BLUE = 2, YELLOW = 3, PURPLE = 4;
            int[][] p = {
                    {RED,RED,BLUE,BLUE,GREEN,YELLOW,BLUE,YELLOW,RED,PURPLE},
                    {GREEN,GREEN,GREEN,BLUE,RED,PURPLE,RED,YELLOW,YELLOW,BLUE},
                    {BLUE,RED,RED,YELLOW,YELLOW,PURPLE,BLUE,GREEN,GREEN,BLUE},
                    {YELLOW,RED,BLUE,YELLOW,BLUE,RED,PURPLE,GREEN,GREEN,RED},
                    {YELLOW,RED,BLUE,BLUE,PURPLE,GREEN,PURPLE,RED,YELLOW,BLUE},
                    {PURPLE,YELLOW,RED,RED,YELLOW,RED,PURPLE,YELLOW,RED,RED},
                    {YELLOW,YELLOW,GREEN,PURPLE,GREEN,RED,BLUE,YELLOW,BLUE,GREEN},
                    {RED,YELLOW,BLUE,BLUE,YELLOW,GREEN,PURPLE,RED,BLUE,GREEN},
                    {GREEN,GREEN,YELLOW,YELLOW,RED,RED,PURPLE,BLUE,BLUE,GREEN},
                    {PURPLE,BLUE,RED,RED,PURPLE,YELLOW,BLUE,RED,RED,GREEN}};

            String[] strs = sc.nextLine().split(" ");
            int[] poss = new int[strs.length];
            for (int i=0; i<poss.length; i++)
                poss[i] = Integer.valueOf(strs[i]);

            for (int i=0; i<poss.length; i++) {
                int m = (poss[i] - 1) / 10;
                int n = (poss[i] - 1) % 10;
                int num = p[m][n];

                // 如果当前位置不为空,则递归消除之
                if (num == 5)
                    continue;
                solve(p, m, n, num);

                // 如果下方为空,则向下移动
                for (int y=0; y<10; y++) {
                    int bottom = 9;
                    int nonempty = 9;
                    while (true) {
                        while (nonempty >= 0 && p[nonempty][y] == 5)
                            nonempty--;
                        if (nonempty < 0)
                            break;
                        if (bottom != nonempty) {
                            p[bottom][y] = p[nonempty][y];
                            p[nonempty][y] = 5;
                        }
                        bottom--;
                        nonempty--;
                    }
                }

                // 如果左侧整列为空,则向左移动
                int left = 0;
                int nonemptyline = 0;
                while (true) {
                    while (nonemptyline < 10) {
                        boolean flag = true;
                        for (int x=0; x<10; x++) {
                            if (p[x][nonemptyline] != 5) {
                                flag = false;
                                break;
                            }
                        }
                        if (flag)
                            nonemptyline++;
                        else
                            break;
                    }
                    if (nonemptyline >= 10)
                        break;
                    if (left != nonemptyline) {
                        for (int x=0; x<10; x++) {
                            p[x][left] = p[x][nonemptyline];
                            p[x][nonemptyline] = 5;
                        }
                    }
                    left++;
                    nonemptyline++;
                }
            }

            // 统计分类方块的数量(包含有颜色的方块和空方块)
            int[] res = new int[6];
            for (int x=0; x<10; x++)
                for (int y=0; y<10; y++)
                    res[p[x][y]]++;

            for (int i=0; i<5; i++) {
                System.out.print(res[i]);
                if (i != 4)
                    System.out.print(" ");
                else
                    System.out.println();
            }
        }
    }

    private static void solve(int[][] p, int m, int n, int num) {
        int[][] d = {{-1,0}, {1,0}, {0,-1}, {0,1}};

        for (int i=0; i<4; i++) {
            int newm = m + d[i][0];
            int newn = n + d[i][1];
            if (newm < 0 || newm >= 10 || newn < 0 || newn >= 10)
                continue;
            if (p[newm][newn] == num) {
                p[newm][newn] = 5;
                solve(p, newm, newn, num);
            }
        }
    }
}