思路
这道题的难点在于怎样在列先消除的情况下找出需要消除的行。其实算法非常简单,我们可以定义两个数组,一个用来判断是否需要消除,一个用来存放消除的结果。
代码如下:
#include<iostream>
#include<string>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
int a[n][m],b[n][m];
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>a[i][j];//用来对比的数组a
b[i][j]=a[i][j];//用来存储结果的b
}
}
int hang,lie;
int k=1;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
k=1;
for(lie=j+1;lie<m;lie++)//对比一行中相等的
{
if(a[i][j]==a[i][lie])
{
k++;
if(k>=3)//若相同的大于等于三开始消除
{
b[i][j]=0;
b[i][lie-1]=0;
b[i][lie]=0;
}
}
else
{
j=lie-1;//提高效率对比过了的不重复
break;
}
}
}
}
for(int j=0;j<m;j++)
{
for(int i=0;i<n;i++)
{
k=1;
for(hang=i+1;hang<n;hang++)//对比一列中相等的
{
if(a[i][j]==a[hang][j])
{
k++;
if(k>=3)
{
b[i][j]=0;
b[hang-1][j]=0;
b[hang][j]=0;
}
}
else
{
i=hang-1;
break;
}
}
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(j!=0)
{
cout<<" ";
}
cout<<b[i][j];
}
cout<<endl;
}
}
有什么问题可以留在评论区。