201604-2 俄罗斯方块

举报
辰chen 发表于 2022/06/16 23:44:01 2022/06/16
【摘要】 201604-2 俄罗斯方块 C++总结 本题链接:201604-2 俄罗斯方块 本博客给出本题截图: C++ #include <iostream> #includ...

201604-2 俄罗斯方块


本题链接201604-2 俄罗斯方块

本博客给出本题截图
在这里插入图片描述

C++

#include <iostream>
#include <cstring>

using namespace std;

const int N = 20;

int g[N][N], s[N][N];
int p[4][4];

bool draw(int x, int y)
{
    memcpy(s, g, sizeof s);
    for (int i = 0; i < 4; i ++ )
        for (int j = 0; j < 4; j ++ )
            if (p[i][j])
            {
                int a = x + i, b = y + j;
                s[a][b] ++ ;
                if (s[a][b] == 2) return true;
            }
    return false;
}

int main()
{
    for (int i = 0; i < 15; i ++ )
        for (int j = 0; j < 10; j ++ )
            cin >> g[i][j];
    for (int i = 0; i < 10; i ++ ) g[15][i] = 1;

    for (int i = 0; i < 4; i ++ )
        for (int j = 0; j < 4; j ++ )
            cin >> p[i][j];

    int c;
    cin >> c;
    c -- ;

    for (int i = 0; ; i ++ )
        if (draw(i, c))
        {
            draw(i - 1, c);
            break;
        }

    for (int i = 0; i < 15; i ++ )
    {
        for (int j = 0; j < 10; j ++ )
            cout << s[i][j] << ' ';
        cout << endl;
    }

    return 0;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55

总结

我们在判断是否出现重叠的时候,可以用直接累加的方法,如果一个格子上有方块,那么根据题意这个格子显然是 1,如果发生了重叠,那么显然说明这个格子上是有 2 个方块的,那么一旦出现了 2个方块的格子,就说明在这一时刻发生了重叠,那么在上一时刻就是恰好没有发生重叠的时刻(即我们的目标所求时刻),故我们只需要输出上一时刻的图形即可,对于特殊的边界处理:没有发生重叠,直接落到了最后一行,我们可以自动在最后一行上补充一行(这行其实是不存在的),并把这行全部赋值为 1,那么显然会有接触到最后一行时,继续往下走,即会与我们自行添加的一行发生重叠,按照我们之前的思路同样为上一时刻为所求目标时刻

文章来源: chen-ac.blog.csdn.net,作者:辰chen,版权归原作者所有,如需转载,请联系作者。

原文链接:chen-ac.blog.csdn.net/article/details/120449992

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。