此代码无法accpetd,OJ判定有问题,即使你使用OJ曾经accpetd的代码依旧无法通过。
上学期2048这个小游戏可谓风靡一时,如果让你来写,你能写出来吗?
为了简化题目,我们只考虑一行的情况,并且默认为进行一次向右操作。
操作规则:
1、 如果有相同的数字,则向右相加合并;
2、 如果有超过2个相同数字,则右方优先合并;
3、 如果没有相同数字,则整体向右靠;
4、 数字只能是2n (1<=n<=11,n为整数);
5、 0代表没有数字,并且每个数字在一次操作中只会合并一次。
第一行输入一个整数N(0<N<1000),表示有N组测试数据。
每组测试数据包括4个合法的整数,表示2048游戏中的一行。
对于每组数据,输出一次向右操作之后的结果。
2
0 0 2 2
2 2 2 2
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;
}
}