问题描述
思路
- 数组nums[ ]存放数,数组tags[ ]标记nums数组中对应位置的数是否被消掉。
- 行列分别处理,以行为例:
当两数相同时,往后继续遍历,并记录相同的数字个数,直到出现不相同的相邻数字。
当计数器的值≥3时,通过循环器控制循环次数,对tags[ ]数组的相应位置赋值为1
for( i = 0; i < n; i++){
for( j = 0; j < m-1; j++){
counter = 1;
while( j < m-1 && nums[i][j] == nums[i][j+1]){
counter++;
j++;
}
if( counter >= 3 ){
q = j;
while(counter > 0){
tags[i][q] = 1;
q--;
counter--;
}
}
}
}
- 将tag == 1 对应位置的数置换为0
完整代码
#include<iostream>
using namespace std;
int main(){
int n,m;
cin >> n >> m;
int nums[n][m];
int tags[n][m];
int i,j,q;
for( i = 0; i < n; i++)
for( j = 0; j < m; j++){
cin >> nums[i][j];
tags[i][j] = 0;
}
int counter = 1;
for( i = 0; i < n; i++){
for( j = 0; j < m-1; j++){
counter = 1;
while( j < m-1 && nums[i][j] == nums[i][j+1]){
counter++;
j++;
}
if( counter >= 3 ){
q = j;
while(counter > 0){
tags[i][q] = 1;
q--;
counter--;
}
}
}
}
for( j = 0; j < m; j++){
for( i = 0; i < n-1; i++){
counter = 1;
while( i < n-1 && nums[i][j] == nums[i+1][j]){
counter++;
i++;
}
if( counter >= 3 ){
q = i;
while(counter > 0){
tags[q][j] = 1;
q--;
counter--;
}
}
}
}
for( i = 0; i < n; i++ )
for( j = 0; j < m; j++)
if( tags[i][j] == 1)
nums[i][j] = 0;
for( i = 0; i < n; i++){
for( j = 0; j < m; j++)
cout << nums[i][j] << ' ';
cout << endl;
}
return 0;
}
提交截图