程序设计思维与实践 CSP-M3 补题 (3/4/数据班)

程序设计思维与实践 CSP-M3 补题 (3/4/数据班)

A - csp-m3-t1

问题分析

根据题目对“段”的定义,建立一个栈,对于每个输入的元素,栈空则入栈,段数加一,不空则与栈顶元素比较,相同则continue,不同弹出栈顶元素,段数加一。

#include<bits/stdc++.h>
using namespace std;
int main()
{ 
	stack<int> s;
	int n,t;
	int ans=0;
	cin>>n;
	while(n--){
		cin>>t;
		if(s.empty()){
			s.push(t);
			ans++;
		}
		else{
			if(t==s.top()){
				continue;
			}
			else{
				s.push(t);
				ans++;
			}
		}
	}
	cout<<ans<<endl;
	return 0;
}

B - csp-m3-t2

问题分析

额外建立一个矩阵。储存消除后的棋盘。

初始状态两个矩阵一样,遍历前矩阵a,如果存在可消除的,在矩阵b中,把有对应位置标记未0.最后扫描矩阵b,进行输出。

#include<bits/stdc++.h>
using namespace std;
int a[105][105];
int b[105][105];
int main()
{
   int n,m;
   int i,j;
   scanf("%d %d",&n,&m);
   for(i=0;i<n;i++)
   {
   	for(j=0;j<m;j++)
   	{
   		scanf("%d",&a[i][j]);
   		b[i][j]=a[i][j];
   	}
   }
   for(i=0;i<n;i++)
   {
   	for(j=0;j<m-2;j++)
   	{
   		if(a[i][j]==a[i][j+1] && a[i][j+1]==a[i][j+2])
   		{
   			b[i][j]=0;
   			b[i][j+1]=0;
   			b[i][j+2]=0;
   		}
   	}
   }
   for(i=0;i<m;i++)
   {
   	for(j=0;j<n-2;j++)
   	{
   		if(a[j][i]==a[j+1][i] && a[j+1][i]==a[j+2][i])
   		{
   			b[j][i]=0;
   			b[j+1][i]=0;
   			b[j+2][i]=0;
   		}
   	}
   }
   for(i=0;i<n;i++)  //输出 
   {
   	printf("%d",b[i][0]);
   	for(j=1;j<m;j++)
   	{
   		printf(" %d",b[i][j]);
   	}
   	printf("
");
   }
   return 0;
}

C - csp-m3-t4

问题分析

水平所限,这个题没有做出来。

原文地址:https://www.cnblogs.com/master-cn/p/12912738.html