考察:
这道题主要考察了矩阵的运算,边界点的判断,以及如何度量下降
思路:
采用了用move变量作为整个4*4矩阵下降距离,一旦有一个点与在15*10矩阵中的下面一点同为1,则停止。
相关代码如下:
#include <iostream>
using namespace std;
#define MAX 0x3f3f3f
int mat[17][11];
int block[4][4];
int col;
int main(){
//cin
for(int i=1;i<=15;i++)
for(int j=1;j<=10;j++) cin>>mat[i][j];
for(int j=1;j<=10;j++) mat[16][j]=1;
for(int i=0;i<4;i++)
for(int j=0;j<4;j++) cin>>block[i][j];
cin>>col;
//solve
int move=0;
bool isOk=0;
while(1){
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
if(block[i][j]&&mat[i+move+2][j+col])
isOk=1;
if(isOk) break;
move++;
}
//output
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
if(block[i][j])
mat[i+move+1][j+col]=block[i][j];
for(int i=1;i<=15;i++){
for(int j=1;j<=10;j++)
cout<<mat[i][j]<<" ";
cout<<endl;
}
return 0;
}