201604-2 俄罗斯方块
【摘要】
201604-2 俄罗斯方块
C++总结
本题链接:201604-2 俄罗斯方块
本博客给出本题截图:
C++
#include <iostream>
#includ...
本题链接: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)