多组数据要求求出最大平台的长度

来源:互联网 发布:caffe 源码 github 编辑:程序博客网 时间:2024/06/16 10:13

已知一个已经从小到大排列好的数组,说这个数组中的一个平台 
(Plateau),就是连续的一串值相同的元素,并且这一串元素不能再延 
伸。例如,在 1,2,2,3,3,3,4,5,5,6 中 1,2.2,3.3.3,4, 
5.5,6 都是平台。试编写一个程序,接收一个数组,把这个数组中最长的 
平台找出来。在上面的例子中 3.3.3 是该数组中最长的平台。(注:为了 
方便,测试用例的数组最大长度都不超过 50,数组中的元素全部为整数范 
围为[-2^31,2^31-1])。

再次声明我只是来水博客的,我所发的东西,仅只是为了我个人的成长和学习,如果有大神看到了请您指点,对于新学习的人来说,如果您能从我发的博客中获得一点什么东西,我真的很开心。

这是一道来自于某OJ平台的一道题目,我们先来分析一下这个题目,我相信你应该能看懂题目的要求,在我看来其实就是求相同的数据的最大长度,例:3,3,3.这便是我们所要求的最大长度,其实用一个数组和一个循环便可以很简单的求出,代码如下:


#include<iostream>
using namespace std;
int main()
{
int num[51];   //因为题目要求,所以我们定义一个51长的数组
int a,l=1,i;
while(cin>>a)  //要求多组输入的式子,C语言中是while(scanf(“%d”,&a)!=EOF)
{
for(i=0;i<a;i++)
cin>>num[i];   //在这里是输入数据,例如a是10,则这里是输入10个数字

for(i=0;i<a;i++)  //这里是循环整个数组,为了找出最大平台
{
if(num[i]==num[i+l])    //如果相等则执行内部代码
{
l++;     //如果这个数和下一个数是相等的,则加1
i--; //这是为了消除循环中的i++,使i的值不发生改变,而是由 l 来决定,如果某个平台一直连续则一直执行,自然会求出最大值,如果没有,则直接不会执行。
}
}
cout<<l<<endl;
l=1;   //因为是多组输入,为了不影响下一次计算,要重新定义
num[a]=0;  //直接将所有的数组全部初始化
}
return 0;
}

阅读全文
1 0
原创粉丝点击