题目描述
小丽在上班编程课时,发现有一些数很有趣,这些数正好比该数左右相邻的数都大,就像大海里的浪花的浪尖一样美丽;小丽就给这些数起了一个名字叫做“浪尖数”,比如:2 3 1中的3,就像一朵波浪的浪尖一样,正好比左右两个数都大。
请你编程帮助小丽计算一下,一个数组中有多少个“浪尖数”。
输入
第一行,是一个整数n代表数组找那个有n个数(n<=100)
第二行有n个整数,用空格隔开。
输出
输出一个整数,代表满足条件的浪尖数的数量。
样例输入 复制
5
1 3 2 4 1
样例输出 复制
2
来源/分类
数组问题
请提供思路,本人感谢
思路:读入数据后,从第二个数开始循环,到倒数第二个数。如果 num[i] > num[i - 1] && num[i] > num[i + 1],那么就是“浪尖数”。
代码:
#include<bits/stdc++.h>
using namespace std;
int n, a[105], ans;
int main(){
cin >> n;
for(int i = 1; i <= n; i++) cin >> a[i];
for(int i = 2; i < n; i++){
if(a[i] > a[i - 1] && a[i] > a[i + 1]) ans++;
}
cout << ans << endl;
return 0;
}
#include<iostream>
using namespace std;
int n, a[105], ans;
int main(){
cin >> n;
for(int i = 1; i <= n; i++)
cin >> a[i];
for(int i = 2; i < n; i++)
if(a[i] > a[i - 1] && a[i] > a[i + 1])
ans++;
cout << ans;
return 0;
}
这道题的思路是:
因为数据不怎么大,因此我们可以用for循环遍历所有的点,然后每个点看看是不是比左边和右边的都大。
而我们还可以加个小优化,就是第一个点和最后一个点根本不需要遍历,因为他们左右点不全。
下面就是AC代码啦:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,a[101],ans=0;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=2;i<n;i++) //这里是小优化
{
if(a[i]>a[i-1]&&a[i]>a[i+1]) //浪尖数条件
{
ans++;//满足条件,答案加1
}
}
cout<<ans<<endl;
return 0; //好习惯
}
```c++
```