当前位置: 首页 > 工具软件 > 2048.cpp > 使用案例 >

2048(C++)

公良莫希
2023-12-01

写在前面

此代码无法accpetd,OJ判定有问题,即使你使用OJ曾经accpetd的代码依旧无法通过。

Description:

上学期2048这个小游戏可谓风靡一时,如果让你来写,你能写出来吗?

为了简化题目,我们只考虑一行的情况,并且默认为进行一次向右操作。

操作规则:

1、 如果有相同的数字,则向右相加合并;

2、 如果有超过2个相同数字,则右方优先合并;

3、 如果没有相同数字,则整体向右靠;

4、 数字只能是2n (1<=n<=11,n为整数);

5、 0代表没有数字,并且每个数字在一次操作中只会合并一次。

Input:

第一行输入一个整数N(0<N<1000),表示有N组测试数据。

每组测试数据包括4个合法的整数,表示2048游戏中的一行。

Output:

对于每组数据,输出一次向右操作之后的结果。

Sample Input:

2
0 0 2 2
2 2 2 2

Sample Output:

0 0 0 4
0 0 4 4

#include <iostream>
#include "vector"

using namespace std;

int main() {
    int n;
    cin >> n;

    //n组案例循环
    for (int i = 0; i < n; ++i) {

        //装填点数
        vector<int> original;
        for (int j = 0; j < 4; ++j) {
            int number;
            cin >> number;
            original.push_back(number);
        }

        //从右往左,依次合并相同相同点数
        for (int j = 3; j > 0; --j) {
            if (original[j] == original[j - 1] && original[j - 1] != 0 && original[j] != 0) {
                original[j] += original[j - 1];
                original[j - 1] = 0;
            }
        }

        //从右往左,填补空位,向右靠
        for (int j = 3; j > 0; --j) {
            if (original[j] == 0) {
                original[j] = original[j - 1];
                original[j - 1] = 0;
            }
        }

        //格式输出
        for (int j = 0; j < original.size() - 1; ++j) {
            cout << original[j] << " ";
        }
        cout << original[3] << endl;


    }
}

 类似资料: