2021蓝桥杯真题最大间隙 C语言/C++
创始人
2025-05-31 02:54:12

题目描述
给定一个序列 a 1 ≤a2 ≤⋯≤an 。其中 a 1 ≤a2 ≤⋯≤an 。

相邻两个数之间的差(后一个数减前一个数)称为它们的间隙。

请问序列中最大的间隙值是多少?

输入描述
输入的第一行包含一个整数 n,表示序列的长度。

第二行包含 n 个正整数,为给定的序列。

其中,1≤n≤1000,1≤ai≤10^5

输出描述
输出一个整数,表示序列中最大的间隙值。

输入输出样例
示例 1
输入

5
1 3 8 9 12
输出

5
运行限制
最大运行时间:1s
最大运行内存: 128M

所需变量

int max = 0;//初始化max为0

int arr[2] = {0};//利用一个下标仅有2的数组存储

int n;//代表共有n个数

int i;//循环变量

思路:我们每次求得都是两个数之间的差距,那么我们考虑是否能将这两个数只存放在一个2个空间大小的一维数组arr中,比如我们来了第一个数,我们就放在arr[0],第二个数放在arr[1],第三个数放在arr[0],以此类推下去,这样我们就不需要定义一个n长的一维数组,部分实现代码如下:

for(i = 0;icin>>arr[i%2];
}

知道每次如何存储之后,我们就想着判断两个数之间的差值,如果这个差值大于目前我所存储的max,那么我就用这个差值取替换max,将max修改为当前最大,直至循环结束,我们就能得到最大的间隙

if(i%2){if((arr[i%2] - arr[0])>max){max = arr[i%2] - arr[0];}
}else{if((arr[i%2] - arr[1])>max){max = arr[i%2] - arr[1];}
}

将上面两个理解后,整合一下就能得到下面的答案,代码如下(编译器是dv,语言是C语言):

#include 
using namespace std;
int main()
{int max = 0,arr[2] = {0},n,i;cin>>n;for(i = 0;icin>>arr[i%2];if(i%2){if((arr[i%2] - arr[0])>max){max = arr[i%2] - arr[0];}}else{if((arr[i%2] - arr[1])>max){max = arr[i%2] - arr[1];}}}cout<

在这里插入图片描述

相关内容

热门资讯

4家“中国英伟达”抢着上市 订阅 快刀财经 ▲ 做您的私人商学院各显神通的中国AI芯片。作者:奇偶工作室来源: 奇偶工作室(ID...
“招商系”老将王颖获批担任招商... 近日,国家金融监督管理总局深圳监管局(下称“深圳金融监管局”)发布行政许可批复,正式核准王颖招商信诺...
平安人寿临时提案遭华夏幸福否决... 中国平安(601318.SH)与华夏幸福(600340.SH)之间的百亿纠葛再度升级。继12月17日...
MiniMax递表,把大模型公... 文 / 王浩纯来源 / 节点财经在香港中环的金融心脏地带,一场关于中国 AI 未来的资本竞速正在悄然...
年入10亿的网红按摩仪,要IP... “健康焦虑”这个赛道,挺魔幻的。作者 |渡尘来源 |投资家(ID:touzijias)“健康焦虑”这...