文章
40
粉丝
0
获赞
56
访问
8.9k
#include<bits/stdc++.h>
using namespace std;
// 通过将矩阵分解为一行四个数组,从而达到每次只需要处理一个数组即可
void merge(int b[]){
int flag=0,front=b[0];
for(int i=1;i<4;i++){
if(!flag&&front==b[i]){
b[i-1]+=b[i-1]; // 合并操作
b[i]=0; // 将合并后的后位置数归0
flag=1; // 标记已经合并
}else{
front=b[i];
flag=0;
}
}
// 经过上面的操作已经使得数组向左合并,但是合并过程中会产生新的0
// 下面进行二次去0
int i=0;
for(int j=0;j<4;j++){
if(b[j]!=0){
b[i]=b[j];
i++;
}
}
// 在后面进行补0操作
while(i<4){
b[i]=0;
i++;
}
}
int main(){
int n,num[4][4],b[4];
cin>>n;
for(int i=0;i<4;i++){
cin>>num[i][0]>>num[i][1]>>num[i][2]>>num[i][3];
}
// 上
if(n==1){
for(int j=0;j<4;j++){
int a=0;
for(int i=0;i<4;i++){
// 需要注意的是这里只需要提取非0的即可
if(num[i][j]!=0){
b[a]=num[i][j];
a++;
}
}
while(a<4){
b[a]=0;
a++;
}
merge(b);
for(int i=0;i<4;i++){
num[i][j]=b[i];
...
登录后发布评论
暂无评论,来抢沙发