C语言——打印极值点下标

版权声明:都是平时的作业 欢迎评论点赞哦 https://blog.csdn.net/Getugly/article/details/84670181

Description 

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

Input 

有2×n+1行输入:第一行是要处理的数组的个数n;对其余2×n行,第一行是此数组的元素个数k(3≤k≤80),第二行是k个整数,每两个整数之间用空格分隔。

Output 

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

Sample Input 


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

Sample Output 


0 7
2 3 4 5 6 10 12
0 2 3 10 12 14

方法一:

#include<stdio.h>

int main(){
	int a[81];
	int b[81]={0};
	int n,m;
	int i,j,c,k,l;
	scanf("%d",&n);
	for(i=1;i<=n;i++){
		scanf("%d",&m);
		for(j=0;j<m;j++){
			scanf("%d",&a[j]);
		}
		c=0;
		for(k=0;k<m;k++){
			if(k==0 && ( a[k]>a[k+1] || a[k]<a[k+1] )){
				b[c++]=k;
			}
			if(k!=0 && ((a[k]>a[k+1] && a[k]>a[k-1]) || (a[k]<a[k+1] && a[k]<a[k-1])) && k!=(m-1))
			{
				b[c++]=k;
			}
			if(k==(m-1) && ( a[k]>a[k-1] ||a[k]<a[k-1] )){
				b[c++]=k;
			}
		}
		for(l=0;l<c;l++){
			printf("%d ",b[l]);
		}
		printf("\n");
	}
}


方法二:

#include<stdio.h>

int main(){
	int t,n,i,a[100];
	scanf("%d",&t);
	while(t--){
		scanf("%d",&n);
		for(i=0;i<n;i++){
			scanf("%d",&a[i]);
		}
		for(i=0;i<n;i++){
			if(i==0 && a[i]!=a[i+1]) printf("%d ",i);
			if((i>0 && i<n-1) && ((a[i]>a[i-1] && a[i]>a[i+1]) || (a[i]<a[i-1] && a[i]<a[i+1]))) printf("%d ",i);
			if(i==n-1 && a[i]!=a[i-1]) printf("%d ",i);
		}
		printf("\n");
	}
}


猜你喜欢

转载自blog.csdn.net/Getugly/article/details/84670181