我们可以把行和列分开来看,先看行,用temp记录当前的数字是什么,遍历一行,遇到和temp相同的数字,cnt++,如果此时已经是这一行的末尾,那么判断cnt是否>=3,如果是,那么把当下位置以及往前cnt个位置放入vector中;如果遇到的数字与temp不同,那么判断cnt是否>=3,操作与之前类似,然后temp赋为新遇到的那个数字,cnt赋为1。
列的操作和行类似,之后我们根据vector存储的位置把棋盘相应位置赋为0,最后输出即可。
以下是完整代码:#include<iostream> #include<vector> using namespace std; int map[35][35]; int n,m; struct pos{ int x,y; pos(int a=0,int b=0) { x=a; y=b; } }; int main() { for(int i=0;i<35;i++)//初始化 { for(int j=0;j<35;j++) { map[i][j]=0; } } cin>>n>>m; for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { cin>>map[i][j]; } } int temp,cnt; vector<pos> v; for(int i=0;i<n;i++)//先判断行 { temp=map[i][0]; cnt=1; for(int j=1;j<m;j++) { if(temp==map[i][j]) { cnt++; if(j==m-1) { if(cnt>=3) { for(int k=0;k<cnt;k++) { pos p(i,j-k); v.push_back(p); } } } } else { if(cnt>=3) { for(int k=1;k<=cnt;k++) { pos p(i,j-k); v.push_back(p); } } temp=map[i][j]; cnt=1; } } } for(int j=0;j<m;j++)//再判断列 { temp=map[0][j]; cnt=1; for(int i=1;i<n;i++) { if(temp==map[i][j]) { cnt++; if(i==n-1) { if(cnt>=3) for(int k=0;k<cnt;k++) { pos p(i-k,j); v.push_back(p); } } } else { if(cnt>=3) { for(int k=1;k<=cnt;k++) { pos p(i-k,j); v.push_back(p); } } temp=map[i][j]; cnt=1; } } } for(int i=0;i<v.size();i++)//将相应位置赋为0 { pos p=v[i]; map[p.x][p.y]=0; } for(int i=0;i<n;i++)//输出最后的棋盘 { for(int j=0;j<m;j++) { cout<<map[i][j]; if(j!=m-1) { cout<<" "; } else if(i!=n-1) { cout<<'n'; } } } }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算