201512-2 消除类游戏(Java 100)

  • 问题链接消除类游戏

  • 问题分析:模拟法解决。

  • 程序说明:Number2类表示数字对象,其中包含数字和是否被消除;number数组存数字对象

  • 程序代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

class Reader {
    static StringTokenizer token =new StringTokenizer("");
    static BufferedReader  reader   =new BufferedReader (new InputStreamReader(System.in)) ;
    static String nextLine() throws IOException {
        return reader.readLine() ;
    }
    static  String next() throws IOException {
        while(!token.hasMoreTokens()) {
            token =new StringTokenizer(reader.readLine()) ;
        }
        return token.nextToken() ;
    }

    static int nextInt() throws IOException {
        return Integer.parseInt(next()) ;
    }
    static double nextDouble() throws IOException {
        return Double.parseDouble(next()) ;
    }

}

class Number2{
	public int num;
	public boolean reset;
	Number2(int n){
		this.num = n;
		reset = false;
	}
}
public class Main {

	public static void main(String[] args) throws IOException {
		int n = Reader.nextInt();
		int m = Reader.nextInt();
		Number2[][] number = new Number2[n][m];
		for(int i=0;i<n;i++)
			for(int j=0;j<m;j++) {
				number[i][j] = new Number2(Reader.nextInt());
			}
		
		for(int i=0;i<n;i++) {
			for(int j=0;j<m;j++) {
				int c1 = 0;//横向比较
				int c2 = 0;//竖向比较
				while(i+c2+1<n) {//竖向一一比较,相等即加一
					if(number[i+c2][j].num==number[i+c2+1][j].num) {
						c2++;
					}
					else//中间有一例不等,即退出
						break;
					if(c2==2) {//3个,即标记,表示消除,并退出
						number[i][j].reset=true;
						number[i+1][j].reset=true;
						number[i+2][j].reset=true;
						break;
					}
				}
				while(j+c1+1<m) {//思路同上
					if(number[i][j+c1].num==number[i][j+c1+1].num) {
						c1++;
					}
					else
						break;
					if(c1==2) {//同上
						number[i][j].reset=true;
						number[i][j+1].reset=true;
						number[i][j+2].reset=true;
						break;
					}
				}
			}
		}
		
		for(int i=0;i<n;i++) {
			for(int j=0;j<m;j++) {
				if(number[i][j].reset==true)//为true表示已清除,输出0
					System.out.print(0+" ");
				else
					System.out.print(number[i][j].num+" ");
			}
			System.out.println();
		}
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值