C/C++知识点之CSP201512-2:消除类游戏
小标 2018-08-10 来源 : 阅读 1041 评论 0

摘要:本文主要向大家介绍了C/C++知识点之CSP201512-2:消除类游戏,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了C/C++知识点之CSP201512-2:消除类游戏,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

  
   引言:CSP(//www.cspro.org/lead/application/ccf/login.jsp)是由中国计算机学会(CCF)发起的"计算机职业资格认证"考试,针对计算机软件开发、软件测试、信息管理等领域的专业人士进行能力认证。认证对象是从事或将要从事IT领域专业技术与技术管理人员,以及高校招考研究生的复试对象。 
 


问题描述 


  消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除。当有多处可以被消除时,这些地方的棋子将同时被消除。
  现在给你一个n行m列的棋盘,棋盘中的每一个方格上有一个棋子,请给出经过一次消除后的棋盘。
  请注意:一个棋子可能在某一行和某一列同时被消除。


输入格式 


  输入的第一行包含两个整数n, m,用空格分隔,分别表示棋盘的行数和列数。
  接下来n行,每行m个整数,用空格分隔,分别表示每一个方格中的棋子的颜色。颜色使用1至9编号。


输出格式 


  输出n行,每行m个整数,相邻的整数之间使用一个空格分隔,表示经过一次消除后的棋盘。如果一个方格中的棋子被消除,则对应的方格输出0,否则输出棋子的颜色编号。


样例输入 


4 5 
2 2 3 1 2 
3 4 5 1 4 
2 3 2 1 3 
2 2 2 4 4 


样例输出 


2 2 3 0 2 
3 4 5 0 4 
2 3 2 0 3 
0 0 0 4 4 
 


源代码 







# include  
# include  
# include  
 
 
int main(void) 

    int n; //n行
    int m; //m列
    scanf("%d", &n); 
    scanf("%d", &m); 
     
    //给输入矩阵和辅助矩阵分配空间
    int **pInput = (int **)malloc(sizeof(int *) * n); //输入矩阵
    int **pMatrix = (int **)malloc(sizeof(int *) * n); //辅助矩阵,如果相应位置应该被消除置0,否则置1 
    for (int i = 0; i < n; i++) 
    { 
        pInput[i] = (int *)malloc(sizeof(int) * m); 
        memset(pInput[i], 0, sizeof(int) * m); 
        pMatrix[i] = (int *)malloc(sizeof(int) * m); 
        for (int j = 0; j < m; j++) 
        { 
            pMatrix[i][j] = 1; 
        } 
    } 
    //输入
    for (int i = 0; i < n; i++) 
    { 
        for (int j = 0; j < m; j++) 
        { 
            scanf("%d", &pInput[i][j]); 
        } 
    } 
     
    // 按行检查
    for (int i = 0; i < n; i++) 
    { 
        // m<3代表在行上不可能有能消除的元素
        if (m < 3) 
        { 
            break; 
        } 
        else 
        { 
            for (int j = 0; j < m; j++) 
            { 
                int count = 1; 
                while ((j+1) < m && pInput[i][j] == pInput[i][j+1]) 
                { 
                    count += 1; 
                    j += 1; 
                } 
                if (count >= 3) 
                { 
                    // 设置辅助矩阵的值
                    int num = 1; 
                    for (int column = j; num <= count; num++, column--) 
                    { 
                        pMatrix[i][column] = 0; 
                    } 
                }     
            } 
        }      
    } 
     
    // 按列检查
    for (int i = 0; i < m; i++) 
    { 
        // n<3代表在行上不可能有能消除的元素
        if (n < 3) 
        { 
            break; 
        } 
        else 
        { 
            for (int j = 0; j < n; j++) 
            { 
                int count = 1; 
                while ((j+1) < n && pInput[j][i] == pInput[j+1][i]) 
                { 
                    count += 1; 
                    j += 1; 
                } 
                if (count >= 3) 
                { 
                    // 设置辅助矩阵的值
                    int num = 1; 
                    for (int column = j; num <= count; num++, column--) 
                    { 
                        pMatrix[column][i] = 0; 
                    } 
                }     
            } 
        }      
    } 
     
    // 输出结果
    for (int i = 0; i < n; i++) 
    { 
        for (int j = 0; j < m; j++) 
        { 
            printf("%d ", pInput[i][j]*pMatrix[i][j]);             
        }     
        printf("\n"); 
    } 
     
     
    //给输入矩阵和辅助矩阵释放空间
    for (int i = 0; i < n; i++) 
    { 
        free(pInput[i]); 
        free(pMatrix[i]); 
    } 
    free(pInput); 
    free(pMatrix); 
     
    return 0; 
}

本文由职坐标整理并发布,了解更多内容,请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程