- 题目描述:
- 在一个整数数组上,对于下标为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 234 256 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<stdio.h>
#include<string.h>
int main(){
//freopen("input.txt", "r", stdin);
int n=0;
scanf("%d", &n);
while(n--){
int k=0, num[80]={0},isNotFirst=0;//k代表数字个数,isFirst标志位代表是否为第一个输出数据
scanf("%d", &k);
for(int i=0; i < k; i++){
scanf("%d", &num[i]);
}
for(int i=0; i < k; i++){
if(i==0){
if(num[0] < num[1] || num[0] > num[1]) {
printf("%d", 0);
isNotFirst = 1;
}
}else if(i==k-1){
if(num[k-1] < num[k-2] || num[k-1] > num[k-2]) {
if(isNotFirst) printf(" ");
printf("%d", k-1);
isNotFirst = 1;
}
}else{
if((num[i] > num[i-1] && num[i] > num[i+1]) || (num[i] < num[i-1] && num[i] < num[i+1])){
if(isNotFirst) printf(" ");
printf("%d", i);
isNotFirst = 1;
}
}
}
printf("\n");
}
return 0;
}