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

相关推荐
战族狼魂2 小时前
高频面试题精选:分治与AI Agent架构
人工智能·算法·大模型·大语言模型
李剑一2 小时前
你用过网易的将军令嘛?它底层实现账号保护的原理相当简单粗暴
算法
Scott9999HH3 小时前
告别流量波动玄学!从法拉第电磁定律到底层 C/C++ 流量累积算法,深度解密工业级电磁流量计选型与开发
c语言·c++·算法
中达瑞和-高光谱·多光谱3 小时前
1nm到8nm光谱分辨率,你的应用该选哪款光谱相机?
算法·高光谱·高光谱相机
ChaoZiLL4 小时前
我的数据结构4-栈和队列
数据结构
香辣牛肉饭4 小时前
【算法】动态规划 最长公共子序列(LCS)
经验分享·笔记·算法·动态规划
miller-tsunami4 小时前
顺序表相关知识点
数据结构·顺序表
.徐十三.5 小时前
一篇文章看到最短路径——Dijkstra算法
算法
科学实验家6 小时前
二叉树的几道题
算法