题目描述:
小明天天沿着未名湖环湖路跑,有时候也觉得蛮累。
累的时候跑下坡就很开心。小明想知道最长的一段下坡有多长。
环湖路是个圆形,周长n米。每隔一米测一下路面高度,两个测高点之间的高度是单调变化或不变的。
问最长的一段下坡有多少米长。小明只能顺时针跑。下坡必须高度单调减少。
输入描述:
第一行是整数n,表示环湖路一共n米长(2<=n<=100)。第二行是n个整数,每个整数范围[0,10000],按顺时针顺序给出了n个测高点的高度。
输出描述:
最长下坡路段的长度。
样例输入1: | 样例输出1: |
5 2 1 5 6 3 | 3 |
样例输入2: | 样例输出2: |
5 2 1 5 4 3 | 4 |
样例输入3: | 样例输出3: |
4 1 1 1 1 | 0 |
样例输入/输出1说明:
最长的一段下坡为6 3 2 1,有4个整数(表示4个测高点),但是这段路的长度为3
#include<iostream>
using namespace std;
int main()
{
int n,arr[100],temp,t=0,max=0,i;
cin>>n;
for(int i=1;i<=n;i++)//将输入的数据存入数组中
{
cin>>arr[i];
}
temp=arr[1];//将第一个元素存入temp中
for(i=2;i<=n;i++)
{
if(arr[i]<temp)//,如果下一个元素小于temp,就t加一,计算下坡的段数
t++;
//如果不小于,就将t的值赋给max,再令t=0,因为题目要求是连续减小的。
else{
if(t>max)
max=t;
t=0;
}
temp=arr[i];
}
//上一步循环必然会循环完,t有两种可能。
//如果t最后不是等于0,就说明最后一个数小于倒数第二个数。由此从i=1开始,是一个轮回。
for(i=1;i<=n;i++)
{
if(temp>arr[i])
t++;
else{
if(t>max)
max=t;
t=0;
}
temp=arr[i];
}
cout<<max;
return 0;
}