打印极点值下标

题目描述
在一个整数数组上,对于下标为i的整数,如果它大于所有它相邻的整数, 或者小于所有它相邻的整数,则称为该整数为一个极值点,极值点的下标就是i。

输入描述:
第一行是此数组的元素个数k(4<k<80),第二行是k个整数,每两个整数之间用空格分隔。

输出描述:
每个案例输出为n行:每行对应于相应数组的所有极值点下标值,下标值之间用空格分隔。

示例1
输入
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<iostream>
#include<algorithm>
#include<string.h>
#include<iomanip>
#include<map>
#include<set>
#include<vector>

using namespace std; 
 
int main(){
    int sum,count,number;
    vector<int> vc;
	while(cin >> count){
		cin >> count;
		for(int j = 0;j < count;j++){
			cin >> number;
			vc.push_back(number);
		}
		for(int k = 0; k < vc.size() ; k++){
			if(k == 0){
				if(vc[k] > vc[k+1] || vc[k] < vc[k+1]){
					cout << k << " ";
				}
			}else if(k == (vc.size()-1)){
				if(vc[k] > vc[k-1] || vc[k] < vc[k-1]){
					cout << k;
				}
			}else if((vc[k] > vc[k-1] && vc[k] > vc[k+1]) || (vc[k] < vc[k-1] && vc[k] < vc[k+1])){
				cout << k << " ";
			}
		}
		cout << endl;
		vc.clear();
	} 
    return 0;
}





发布了41 篇原创文章 · 获赞 0 · 访问量 1184

猜你喜欢

转载自blog.csdn.net/Gedulding/article/details/104249582