【CCF-CSP】05-01数列分段

题目描述

给定一个整数数列,数列中连续相同的最长整数序列算成一段,问数列中共有多少段?

输入格式

输入的第一行包含一个整数 n,表示数列中整数的个数。

第二行包含 n 个整数 ,,...,,表示给定的数列,相邻的整数之间用一个空格分隔。

输出格式

输出一个整数,表示给定的数列有多个段。

数据范围

1≤n≤1000,

0≤≤1000

输入样例:

8

8 8 8 0 12 12 8 0

输出样例:

5

样例解释

8 8 8 是第一段,0 是第二段,12 12 是第三段,倒数第二个整数 8 是第四段,最后一个 0 是第五段。

解题思路

1、首先按照题目要求输入数列个数和数列中包含的数字;

2、定义并初始化段数cnt为1。PS:因为题目要求n大于等于1,也就是说:一定会有一段。

**3、**遍历数列,比较前后两个数的大小,当前后两个数的大小不相等时,数列的段数++;

PS:for循环只遍历到n-2:因为j的值为i+1(会比较到n-1)。数组下标从0开始,到n-1结束。

4、输出 段数cnt。

代码

cpp 复制代码
#include <bits/stdc++.h>
#include <iostream>
#include <algorithm>

using namespace std;

const int N = 1010;
int n;
int a[N];

int main()
{
	//输入数列中整数的个数 
	scanf("%d", &n);
	//输入数列中包含的n个整数 
	for(int i = 0; i < n; i ++){
		scanf("%d", &a[i]);
	}
	//定义并初始化数列的段数为1
	int cnt = 1; 
	for(int i = 0; i < n-1; i ++){
		//定义j为i的下一个数 
		int j = i+1;
		//如果数列前后两个数不相等,则段数++ 
		if(a[j] != a[i]){
			cnt ++;
		}
	} 
	printf("%d\n", cnt);
	return 0;
}

恭喜你! 又学会了一道CCF-CSP题目。这里是希望你越来越好的小全全!一起努力学习吧!

相关推荐
HugoStudio_SWAN1 小时前
洛谷 P1420 / P1179 / B4262 最长连号、数字统计与词频统计——统计的三种面孔
c++·学习·程序人生·算法
青 春 记 忆2 小时前
LeetCode 350. 两个数组的交集 II|Python 解法详解
python·算法·leetcode
阳明山水2 小时前
销量预测2025—2026:从模型竞赛到系统融合的范式转型
人工智能·深度学习·算法·机器学习·架构
桐盛科技3 小时前
拒绝“漂绿”风险:基于边缘计算的碳排放数据清洗算法与实时校验逻辑
人工智能·算法·边缘计算
wuyk5553 小时前
107.FreeRTOS 链表深度解析:从原理到面试满分答案
c语言·开发语言·数据结构·stm32·单片机·链表·面试
-dzk-3 小时前
【链表】LC 138.随机链表的复制
数据结构·链表
Tongzhi20263 小时前
通芝科技考勤软件三大发展趋势:AI大模型、无感识别与数据底座
大数据·科技·算法·爬山算法
eBest数字化转型方案3 小时前
Route Optimization for FMCG:多目标排线算法的工程实现
大数据·人工智能·算法
洋不写bug4 小时前
链表补充练习,双链表的模拟实现
java·数据结构·链表·双链表·底层实现
residual_fan4 小时前
持续对比强化学习(Continual Contrastive Reinforcement Learning)论文分享
人工智能·算法·数据挖掘·数据分析