#include <iostream>
using namespace std;
int main(){
int min=9999,count=0,k=0;
int line,a,b;
int win[16][11];
int block[5][5];
int trace[5][3];
for(int i=1;i<16;i++){
for(int j=1;j<11;j++){
cin>> win[i][j];
}
}
for(int i=1;i<5;i++){
for(int j=1;j<5;j++){
cin>>block[i][j];
}
}
cin>>line;
for(int i=1;i<5;i++){
for(int j=1;j<5;j++){
if(block[i][j]==1){
k++;
trace[k][1]=i;
trace[k][2]=j+line-1;
}
}
}
for(int i=1;i<5;i++){
a=trace[i][1];
b=trace[i][2];
while(!win[a+1][b]){
count++;
a++;
}
if(count<min){
min=count;
count=0;
}
else count=0;
}
if(min<=14){
for(int i=1;i<5;i++){
a=trace[i][1];
b=trace[i][2];
win[min+a][b]=1;
}
}
for(int i=1;i<16;i++){
for(int j=1;j<11;j++){
cout<<win[i][j]<<" ";
if(j==10){
cout<<endl;
}
}
}
return 0;
}
刚开始不知道怎么处理 55555~看了别人的思路才有=写的,心累嗷嗷嗷
处理方法:将小块的坐标转换成大背景的做坐标,相对应的列按照行数相加进行判断,用count记录加的次数,取出最小的相加数,最后再大背景中进行输出;
错误点:while 的判断条件竟然搞错了!!while(1)则一直执行;
小块转换成大背景的坐标时,单独一个数组进行加式的向上;