关闭

2691:打印极值点下标(百练)

156人阅读 评论(0) 收藏 举报
分类:


百练

/

练习

2691:打印极值点下标

总时间限制:
1000ms
内存限制:
65536kB
描述
在一个整数数组上,对于下标为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
来源
计算概论05

解题思路很简单,比较数组和他的相邻的元素,如果都大于或者都小于则打印下标。比较坑的是我比较是 if(i>1&&i<=num-1){写成了if(i>1&&i<num-1),不小心漏掉了一个元素,gg

#include<stdio.h>
#include<iostream>
#define N 1010
using namespace std;
int main()
{
    int n;
    cin>>n;
    while(n--){
        int num;
        cin>>num;
        int a[N];
        for(int i=0;i<num;i++){
            cin>>a[i];
            if(i==1){
                   if(a[0]!=a[1])
                    cout<<0<<" ";
               }
             if(i>1&&i<=num-1){
                if( ( (a[i-1]>a[i-2]) && (a[i-1]>a[i]) )||( (a[i-1]<a[i-2]) && (a[i-1]<a[i]) )){
                      cout<<i-1<<" ";
                  }
            }
            if(i==num-1){
                if(a[i]!=a[i-1]){
                       cout<<i;
                   }
            }
        }
         cout<<endl;
    }
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:8830次
    • 积分:502
    • 等级:
    • 排名:千里之外
    • 原创:40篇
    • 转载:5篇
    • 译文:0篇
    • 评论:1条
    最新评论