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

导读:本篇文章讲解 C语言——打印极值点下标,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

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");
	}
}


 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/69398.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!