ccf 201512-2 消除类游戏

本文探讨了在C++中使用二维数组时,初始化数组为全零的重要性及如何通过双重循环实现。文章详细介绍了如何检测并消除数组中重复的元素,特别是在一行或一列中有三个相同元素的情况下。此外,还讨论了使用memset函数初始化数组的替代方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 最大的收获:没有初始化给每个元素赋初值的数组,一定要看一下是不是都赋成了0

以前一维数组int a[5]={0}就全是0了,不知道是不是二维数组不能这样用,网上都用的memset,可以初始化为0

用法:memset(t, 0, sizeof(t));   memset就是专门初始化数组的,这样就可以全初始化为0了

第一个参数是数组的地址,t,&t,&t[0][0]都可以,还是写t吧

第二个是初始化的值

第三个就是sizeof(t)

以后数组初始化一定要小心,也不麻烦还是写个循环一个一个初始化吧,这道题里值30分


#include <bits/stdc++.h>
#define _ ios_base::sync_with_stdio(0);cin.tie(0);

using namespace std;

int main() {
	int n,m;cin>>n>>m;
	int arr[n][m];int flag[n][m];
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			cin>>arr[i][j];
			flag[i][j]=0; 
		}
	} 

	//一行三个一样的 
	for(int j=0;j<m;j++){
		if(n>2){
			for(int i=0;i<n-2;i++){
				if(arr[i][j]==arr[i+1][j]&&arr[i+1][j]==arr[i+2][j]){
					flag[i][j]=1;flag[i+1][j]=1;flag[i+2][j]=1;
				}
			}
		}

	}
	//一列三个一样的 
	for(int i=0;i<n;i++){
		if(m>2){
			for(int j=0;j<m-2;j++){
				if(arr[i][j]==arr[i][j+1]&&arr[i][j+1]==arr[i][j+2]){
					flag[i][j]=1;flag[i][j+1]=1;flag[i][j+2]=1;
				}
			}
		}
		
	}
	//修改
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			if(flag[i][j]==1)arr[i][j]=0;
		}
	} 

	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			cout<<arr[i][j]<<" ";
		}
		cout<<endl;
	}
	return 0;
}

//神奇,刚开始加了判断如果n<2不进行列方向的搜索,m<2不进行行方向的搜索,直接break  70分
//删掉break,仍判断是否大于二   60分
//再删除判断  70分
//满分的代码几乎一模一样只不过没有判断没有break 


//看满分代码唯一不同的是定义了最大的范围30*30
//想到是不是flag数组初始化有问题,本来刚开始调试的时候flag有等于乱码的数,就设置成flag==1修改
//测试了一个不用改的,发现有一个被修改了 

//看了一下flag初始化的结果,发现不是全是0 
//就顺手在cin 的二重循环里再赋了一次flag[i][j]=0
//满分
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值