题目分析:
该题是对一串数进行分析,找出其中导致数据大小趋势变化的数,所以可以分为链中情况,一种就是数据呈增大趋势,但是有一个数减小而导致了数据变化趋势变为减小;一种就是数据呈减小趋势但是有一个数增大而导致了数据变化趋势变为增大。所以除了判断相邻数据之间的关系(见博客:https://blog.csdn.net/AIMINdeCSDN/article/details/103356078),还要增加对数据趋势变化的记录,可以单独设置一个变量其值为0或为1.
C语言源程序:
#include<stdio.h>
int main()
{
//设置记录变化趋势的标志
int asc=0,desc=0;
int n,v,i,k;
int sum=0;
scanf("%d",&n);
//先读入一个数,作为初始比较的基值
scanf("%d",&k);
for(i=1;i<n;i++)
{
scanf("%d",&v);
if(v>k)
{
//作为标志点的条件之一既要比相邻数大还要处于减小趋势中
if(desc==1)
{
sum++;
desc=0;
}
asc=1;
}
else
{
//作为标志点的条件之二既要比相邻数小还要处于增大趋势中
if(asc==1)
{
sum++;
asc=0;
}
desc=1;
}
k=v;
}
printf("%d",sum);
return 0;
}
运行结果: