CCF认证201512-2消除类游戏

题目描述

CCF认证201512-2消除类游戏

算法设计+题目分析

分析题目:

题目给予的是一个数字矩阵,
1、可建立一个副本矩阵R;
2、通过判断原矩阵G中的元素的上两格、下两格、左两格、右两格、左右、上下,这六种情况中是否存在消除情况;
3、对副本矩阵R进行赋值(出现了六种情况中的一种,就为0,否则为原矩阵G中的值),G不变。
4、按照正常格式打印矩阵。

注意点+记录点

memset只能初始化数组为0或者-1

代码(100分)

环境
Visual C++6.0

#include <stdio.h>
#include <string.h>

int G[32][32]={0};//初始化原矩阵G为0
int main(){
	//freopen("C:\\input.txt", "r", stdin);
	int n,m;
	int R[32][32];
	memset(R,-1,sizeof(R));//初始化副本矩阵R为-1
	scanf("%d %d", &n, &m);
	for (int y=n-1; y>=0; y--){//输入原矩阵G
		for (int x=0; x<m; x++){
			scanf("%d", &G[x][y]);
		}
	}
	for (int i=n-1; i>=0; i--){
		for (int j=0; j<m; j++){//对原矩阵的每个元素进行6中情况判定
			if (j+1<m && j+2<m){//右边两个存在
				if (G[j][i]==G[j+1][i] && G[j][i]==G[j+2][i]){
					R[j][i]=0;
				}
			}
			if (j-1>=0 && j-2>=0){//左边两个存在
				if (G[j][i]==G[j-1][i] && G[j][i]==G[j-2][i]){
					R[j][i]=0;
				}	
			}
			if (j-1>=0 && j+1<m){//左右两个存在
				if (G[j][i]==G[j-1][i] && G[j][i]==G[j+1][i]){
					R[j][i]=0;
				}	
			}
			if (i+1<n && i+2<n){//上面两个存在
				if (G[j][i]==G[j][i+1] && G[j][i]==G[j][i+2]){
					R[j][i]=0;
				}
			}
			if (i-1>=0 && i-2>=0){//下面两个存在
				if (G[j][i]==G[j][i-1] && G[j][i]==G[j][i-2]){
					R[j][i]=0;
				}
			}
			if (i+1<n && i-1>=0){//上下两个存在
				if (G[j][i]==G[j][i+1] && G[j][i]==G[j][i-1]){
					R[j][i]=0;
				}
			}
			if (R[j][i] == -1)	R[j][i]=G[j][i];//6种情况判定均不成功	
		}
	}
	for (int yy=n-1; yy>=0; yy--){//副本矩阵R打印
		for (int xx=0; xx<m; xx++){
			if (xx!=m-1) printf("%d ", R[xx][yy]);
			else  printf("%d", R[xx][yy]);
		}
		if (yy!=0)  printf("\n");
	}
	return 0;
}

感谢链接

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值