week12实验B 消消乐大师--Q老师

   日期:2020-05-10     浏览:105    评论:0    
核心提示:我们可以把行和列分开来看,先看行,用temp记录当前的数字是什么,遍历一行,遇到和temp相同的数字,cnt++,如果此时已经是这一行的末尾,那么判断cnt是否>=3,如果是,那么把当下位置以及往前cnt个位置放入vector中;如果遇到的数字与temp不同,那么判断cnt是否>=3,操作与之前类似,然后temp赋为新遇到的那个数字,cnt赋为1。列的操作和行类似,之后我们根据vector存储的位置把棋盘相应位置赋为0,最后输出即可。以下是完整代码:#include


我们可以把行和列分开来看,先看行,用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';
			}
		}
	}
}
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服