【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题目。这里是希望你越来越好的小全全!一起努力学习吧!

相关推荐
inrichtt10 小时前
第八课时:SPI总线揭秘:四线全双工通信的奥
c语言·数据结构·stm32·单片机·嵌入式硬件
HPtiger10 小时前
数据结构——选择排序
数据结构·算法·排序算法
康实训10 小时前
老年评估仿真实训平台架构设计与老年人能力评估实训室教学落地实践
大数据·人工智能·算法·实训室·实训室建设
DongQiShanRen10 小时前
六根硬件映射(四):归属澄清、两处不一致与卷十一总表
开发语言·人工智能·算法·rust·哈希算法·集成学习
CCblandy11 小时前
雪花 ID 四个边界实测:时钟回拨重号 500 个,前端 JSON.parse 直接丢精度
后端·python·算法·性能优化·架构
丑梨数据11 小时前
信创环境里跑文档工具:格式兼容与本地合规的几个坑
数据结构·人工智能·算法·决策树·排序算法
烂蜻蜓11 小时前
Pandas入门教程(四):Series数据结构——创建、索引与常用方法
数据结构·pandas
erzong23113 小时前
Linux操作系统:线程概念与控制
linux·算法
Nil20813 小时前
leetcode 5最长回文子串
算法·leetcode·职场和发展
xxwl58513 小时前
区域赛分类题解
c++·笔记·学习·算法