46~~

int a[n];
for (int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}

// 用于标记当前状态,0: 初始状态, 1: 上升状态, 2: 平飞状态, 3: 下降状态
int state = 0;
int count = 0;

for (int i = 1; i < n; i++)
{

if (a[i] > a[i - 1]) // 上升
{
if (state == 3)
{
// 之前是下降,现在开始新的上升,不构成翻越
state = 1;
}
if (state != 1)
{
// 从非上升状态转为上升
state = 1;
}
}

else if (a[i] == a[i - 1]) // 平飞
{
if (state == 1)
{
// 上升后平飞
state = 2;
}
if (state != 2)
{
// 其他状态转为平飞
state = 2;
}
}

else // 下降的情况
{
if (state == 1 || state == 2)
{
// 上升或平飞后下降,构成一次翻越
count++;
state = 3;
}
else if (state== 3||state==0)
{
// 其他状态转为下降
state = 3;
}
}
}

printf("%d\n", count);
return 0;

bug:

收获:标记 用变量标记变化

posted @ 2025-07-11 19:02  ervgiu28hg34y827  阅读(6)  评论(0)    收藏  举报