
题目分析:
该题是对一串数进行分析,找出其中导致数据大小趋势变化的数,所以可以分为链中情况,一种就是数据呈增大趋势,但是有一个数减小而导致了数据变化趋势变为减小;一种就是数据呈减小趋势但是有一个数增大而导致了数据变化趋势变为增大。所以除了判断相邻数据之间的关系(见博客: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;
}
运行结果:

本文详细分析了CSP2016年4月第一题,该题要求找出一串数中改变趋势的数,即从增到减或从减到增的转折点。解决方案通过C语言实现,核心在于判断相邻数之间的大小关系并记录数据趋势变化。博客提供了完整的C语言源代码及运行结果。

359

被折叠的 条评论
为什么被折叠?



