思路拆解:设置bool数组,遍历循环,当和相邻的数字相同时,将除了第一个数字以外相同的数字都置为false,以此类推,只有符合条件bool为true的时候ans++,得到的就是序列段的数量。
ps:特别注意一点,当arr[i],与arr[i+1]比较时,要注意输入最后一位数字的运算,因为对于数组arr来说,没有分配的空间默认数值为0,这样当我们输入的数字最后一位为0的时候就会少计入一个数段,解决办法在bool中置false的时候令b[i+1]=false;就不会因为机器初始化的问题计算失败。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int n,arr[1001];
bool b[1001];
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>arr[i];
b[i]=true;
}
int ans=0;
for(int i=0;i<n;i++){
if(arr[i]==arr[i+1]){
b[i+1]=false;
}
if(b[i]==true){
ans++;
}
}
cout<<ans;
}