其他分享
首页 > 其他分享> > week12实验B 消消乐大师--Q老师

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

作者:互联网

在这里插入图片描述在这里插入图片描述
我们可以把行和列分开来看,先看行,用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';
			}
		}
	}
}

标签:cnt,week12,数字,temp,int,消消,vector,赋为,大师
来源: https://blog.csdn.net/qq_45639151/article/details/106009006