打印极值点下标

题目描述:
  在一个整数数组上,对于下标为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;
}

 

posted on 2016-02-19 14:58  笨蛋杜杜鸟  阅读(274)  评论(0)    收藏  举报

导航