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

相关推荐
Wadli8 小时前
26.单调栈
算法
晨曦夜月8 小时前
进程的五大状态及特殊进程解析
linux·服务器·算法
吟安安安安8 小时前
适合短期冲刺的学习工作流(针对算法)
学习·算法
科研前沿8 小时前
什么是时空融合技术?
大数据·人工智能·数码相机·算法·重构·空间计算
AI科技星8 小时前
全域数学本源公理:0、1、∞ 三者核心关系 (典籍定稿版)
人工智能·算法·数学建模·数据挖掘·量子计算
AI科技星8 小时前
全域数学·第卷:场计算机卷(场空间计算机)【乖乖数学】
java·开发语言·人工智能·算法·机器学习·数学建模·数据挖掘
Deepoch8 小时前
数学模型驱动:Deepoc 低幻觉数学大模型助力发动机全周期智能优化
人工智能·算法·机器学习·deepoc·数学大模型·低幻觉
嘻嘻哈哈樱桃9 小时前
牛客经典101题解题集--贪心算法+模拟
java·python·算法·贪心算法
AKDreamer_HeXY9 小时前
QOJ 12255 - 36 Puzzle 题解
数据结构·c++·数学·算法·icpc·qoj
AI科技星9 小时前
《全域数学》第一部 数术本源 第三卷 代数原本第14篇 附录二 猜想证明【乖乖数学】
人工智能·算法·数学建模·数据挖掘·量子计算