题目描述
题目描述: 在一个整数数组上,对于下标为 i 的整数,如果它大于所有它相邻的整数, 或者小于所有它相邻的整数,则称为该整数为一个极值点,极值点的下标就是 i。
输入: 每个案例的输入如下: 有 2×n+1 行
输入:第一行是要处理的数组的个数 n; 对其余 2×n 行,第一行是此数组的元素个数 k(4<k<80),第二行是 k 个整数,每两个整数之 间用空格分隔。
输出: 每个案例输出为 n 行:每行对应于相应数组的所有极值点下标值,下标值之间用空格分隔。
样例输入:
3
10
10 12 12 11 11 12 23 24 12 12
15
12 12 122 112 222 211 222 221 76 36 31 23 42 56 76 76
15
12 14 122 112 222 222 222 221 76 36 31 234 256 76 73 样例输出:
0 7
2 3 4 5 6 10 12
0 2 3 10 12 14
解题思路
#include<iostream>
using namespace std;
void fun(int a[],int n)
{
if(n==1)
{
cout<<"0"<<endl;
}else if(n==2){
if(a[0]!=a[1])
{
cout<<"0"<<" "<<"1"<<endl;
}else{
cout<<"no"<<endl;
}
}else{
if(a[0]!=a[1])
{
cout<<"0 ";
}
for(int i=1;i<n-2;i++){
if((a[i]<a[i-1]&&a[i]<a[i+1])||(a[i]>a[i-1]&&a[i]>a[i+1])){
cout<<i<<" ";
}
}
if(a[n-2]!=a[n-1])
{
cout<<n-1<<endl;
}
}
}
int main()
{
int n;
cin>>n;
while(n>0){
n--;
int m;
cin>>m;
int a[m];
for(int i=0;i<m;i++){
cin>>a[i];
}
fun(a,m);
}
return 0;
}