瑞神的序列
题目
样例输入
12
2 3 3 6 6 6 1 1 4 5 1 4
样例输出
8
总结与思考
在此处,last_tmp值赋为第一个数字,由于题目中只说了输入的是整数,并没有说是正整数,因此不可以用-1来初始化last_tmp,容易wa。
代码实现
#include<iostream>
using namespace std;
int n,tmp,last_tmp,ans;
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>tmp;
if(i==0){
last_tmp=tmp;
ans=1;
continue;
}
if(last_tmp==tmp) continue;
last_tmp=tmp;
ans++;
}
cout<<ans;
return 0;
}
消消乐大师-Q老师
题目
总结与思考
1、题目思路:两个二维数组a[ ][ ],b[ ][ ],分别用来存放消消乐棋子以及对应的状态(消去 or 没有消去);分别按行、列对棋子进行遍历,如果有大于等于三个棋子相同,则将二维数组b[ ][ ]中对应的位置标记为1,表示消去状态。
2、题目需要搞清楚,按行按列遍历时,二维数组序号的映射关系
代码实现
#include<iostream>
using namespace std;
int n,m,cnt,tmp;
int a[32][32],b[32][32];
void solve(int i,int j)
{
int t=j-1;
int r=a[i][j-1];
while(t>=0&&a[i][t]==r)
{
b[i][t]=1;
t--;
}
}
int main()
{
cin>>n>>m;
cnt=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>a[i][j];
if(i==0&&j==0) tmp=a[i][j];
if(a[i][j]==tmp)
{
cnt++;
continue;
}
if(cnt>=3)
{
solve(i,j);
}
cnt=1;
tmp=a[i][j];
}
if(cnt>=3) solve(i,m);
cnt=0;
}
for(int j=0;j<m;j++)
{
for(int i=0;i<n;i++)
{
if(j==0&&i==0) tmp=a[i][j];
if(a[i][j]==tmp)
{
cnt++;
continue;
}
if(cnt>=3)
{
int t=i-1;
int r=a[i-1][j];
while(t>=0&&a[t][j]==r)
{
b[t][j]=1;
t--;
}
}
cnt=1;
tmp=a[i][j];
}
if(cnt>=3)
{
int t=n-1;
int r=a[t][j];
while(t>=0&&a[t][j]==r)
{
b[t][j]=1;
t--;
}
}
cnt=0;
}
//输出
for(int i=0;i<n;i++)
{
for(int j=0;j<m-1;j++)
{
if(b[i][j]==1)
cout<<"0"<<" ";
else
cout<<a[i][j]<<" ";
}
if(b[i][m-1]==1)
cout<<"0";
else cout<<a[i][m-1];
cout<<endl;
}
return 0;
}