最长下坡
小明天天沿着未名湖环湖路跑,有时候也觉得蛮累。
累的时候跑下坡就很开心。小明想知道最长的一段下坡有多长。
环湖路是个圆形,周长n米。每隔一米测一下路面高度,两个测高点之间的高度是单调变化或不变的。
问最长的一段下坡有多少米长。小明只能顺时针跑。下坡必须高度单调减少。
时间限制:1000
内存限制:65536
输入
第一行是整数n,表示环湖路一共n米长(2<=n<=100)。 第二行是n个整数,每个整数范围[0,10000],按顺时针顺序给出了n个测高点的高度
输出
最长下坡路段的长度
样例输入
样例输入1:
5
2 1 5 6 3
样例输入2:
5
2 1 5 4 3
样例输入3:
4
1 1 1 1
样例输出
样例输出1:
3
样例输出2
4
样例输出3
0
提示
这是个简单枚举题,枚举起点即可
#include <iostream>
// Find the slop length from the start point s.
int find_slop_length_from(int a[], int n, int s)
{
int length = 0;
int i = s;
do
{
int j = (i + 1) % n;
if (a[i] > a[j])
{
length++;
i = j;
}
else
{
break;
}
} while (i != s);
return length;
}
int main()
{
const int N = 101;
int a[N], n;
std::cin >> n;
for (int i = 0; i < n; i++)
std::cin >> a[i];
int max_length = 0;
for (int i = 0; i < n; i++)
{
int length = find_slop_length_from(a, n, i);
if (length > max_length)
max_length = length;
}
std::cout << max_length << '\n';
return 0;
}
这小明真是闲的没事干,一米一量高度......高度你个经验之谈,正常成年人一步的跨度是1m
从第一个坡段开始,相邻破段判断是否减少,减少则是下坡。计算总长度。最后得到最长。要考虑绕圈问题
#include <iostream>
using namespace std;
int main()
{
int n,i,max=0,m=0,s;
int a[100];
cin>>n;
for(i=0;i<n;i++)
cin>>a[i];
s = a[0];
for(i=1;i<n;i++)
{
if(a[i] < s)
m++;
else
{
if(m > max)
max = m;
m = 0;
}
s = a[i];
}
for(i=0;i<n;i++)
{
if(a[i] < s)
m++;
else
{
if(m > max)
max = m;
break;
}
s = a[i];
}
cout<<max;
return 0;
}