[编程题] 俄罗斯方块

这是一个关于俄罗斯方块的编程挑战,玩家在游戏机上玩到第m个方块落下时结束游戏,任务是通过模拟游戏过程计算得分。游戏规则特殊,每行被填满时得1分。解题思路是使用二维数组模拟游戏桌面,记录每个方块的落下位置,最后检查并累加完整行的数目以得出总分。
摘要由CSDN通过智能技术生成

时间限制:1秒

空间限制:262144K

小易有一个古老的游戏机,上面有着经典的游戏俄罗斯方块。因为它比较古老,所以规则和一般的俄罗斯方块不同。
荧幕上一共有 n 列,每次都会有一个 1 x 1 的方块随机落下,在同一列中,后落下的方块会叠在先前的方块之上,当一整行方块都被占满时,这一行会被消去,并得到1分。
有一天,小易又开了一局游戏,当玩到第 m 个方块落下时他觉得太无聊就关掉了,小易希望你告诉他这局游戏他获得的分数。
 

输入描述:

第一行两个数 n, m
第二行 m 个数,c1, c2, ... , cm , ci 表示第 i 个方块落在第几列
其中 1 <= n, m <= 1000, 1 <= ci <= n

 

输出描述:

小易这局游戏获得的分数

 

编程思路:用二维数组去模拟游戏桌面,

0 0 0 0 0 0 0...

0 0 0 0 0 0 0...

 ...

...

0 0 0 0 0 0 0...

当方块落在第i列,第i列最底层(或者最顶层,参考不同)首个为0的位置改为1,代表方块落在这个位置,当所有方块落下,

1 0 1 1 1 0 0...

0 1 0 1 1 0 0...

1 1 1 1 1 1 1...

...

...

0 0 0 0 1 1 ...

最后遍历矩阵,遇到全为1的一行,分数+1

#include<iostream>

using namespace std;

int main() {

    int n, m, c[1002][1002]={0};

    int score = 0;

    int x;

    cin >> n >> m;

    int i, j;

    int p[1001] = {0};

    for (i=1; i<=m; i++) {

        cin >> x;

        p[x]++;

        c[p[x]][x] = 1;

    }

    for (i=1; i<=m; i++) {

        for (j=1; j<=n; j++) {

            if (0 == c[i][j])

                break;

        }

        if (j>n)

            score++;

    }

    cout << score;

    return 0;

}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值