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

相关推荐
Liu628881 天前
C++中的工厂模式高级应用
开发语言·c++·算法
AI科技星1 天前
全尺度角速度统一:基于 v ≡ c 的纯推导与验证
c语言·开发语言·人工智能·opencv·算法·机器学习·数据挖掘
条tiao条1 天前
KMP 算法详解:告别暴力匹配,让字符串匹配 “永不回头”
开发语言·算法
干啥啥不行,秃头第一名1 天前
C++20概念(Concepts)入门指南
开发语言·c++·算法
tobias.b1 天前
计算机基础知识-数据结构
java·数据结构·考研
zzh940771 天前
Gemini 3.1 Pro 硬核推理优化剖析:思维织锦、动态计算与国内实测
算法
2301_807367191 天前
C++中的解释器模式变体
开发语言·c++·算法
愣头不青1 天前
617.合并二叉树
java·算法
MIUMIUKK1 天前
双指针三大例题
算法
灵感__idea1 天前
Hello 算法:复杂问题的应对策略
前端·javascript·算法