peak 选择何种数组

本文介绍了一种通过数组存储山峰高度并使用for循环遍历数组以计算山峰数量的算法实现。该算法适用于输入一系列山峰高度值的情况,能够有效识别并计算满足特定条件的山峰数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要是山峰的高度如何存储,用字符串数组存储的话是连在一起的,不能有空格,所以用常规的数字数组存储,用for循环控制来逐个存储,这样就解决了空格问题,其实题目要求每次输入高度值得个数,用意正是在此。

peak

题目描述

Amber喜欢爬山,现给你一条山脉的高度变化图,请问一共有多少座山峰? 一座山峰的定义是满足高度值 Hi> Hi-1 并且 Hi > Hi+1。

输入

样例的第一行是一个整数T(T≤20),表示样例的个数。每个样例的第一行是一个整数N(3≤N≤1,000),表示高度值的个数。第二行是N个正整数Hi (1≤Hi ≤ 1,000).

输出

每行输出一个样例的结果。

样例输入
2
3
1 2 1
3
1 1 2
样例输出
1
0


#include <stdio.h>
int main()
{
	int T,N,H[1000],i;
	scanf("%d",&T);
	while(T--)
	{
		int num=0;
		scanf("%d",&N);
		for(i=0; i<N; i++)
		{
			scanf("%d",&H[i]);
		}
		for(i=1; i<N-1; i++)
		{
			if(H[i]>H[i-1] && H[i]>H[i+1])
			num++;
		}
		printf("%d\n",num);
	}
	return 0;
}
#include "display.h" DisplayStruct dsp; void segDisplay(void); // 共阴极数码管,阴极位选(0有效),阳极段选(1有效) const u16 segCode[11] = { /* 0 1 2 3 4 5 6 7 */ 0x003F, 0x0006, 0x005B, 0x004F, 0x0066, 0x006D, 0x007D, 0x0007, /* 8 9 off */ 0x007F, 0x006F, 0x0000 }; /******************************************************************************* * @brief 初始化数码管用到的GPIO端口和dsp结构体 * @param None * @retval None *******************************************************************************/ void display_init(void) { GPIO_InitTypeDef GPIO_InitStructure = {0}; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE); // PA0~PA7: 段选(分别连接引脚A~G); // PB12~PB15:位选(分别连接引脚D1~D4) GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7|GPIO_Pin_8 | GPIO_Pin_9 |GPIO_Pin_12 | GPIO_Pin_13 ; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); dsp.currDigit = 1; // dsp结构体的初始化 dsp.SegDisplay = segDisplay; } /******************************************************************************* * @brief 设置数码管要显示的4位数值。 * @param dsp:数码管结构体指针;value[4]:4位数值;dotBit:小数点位置(没有小数点置0) * @retval None *******************************************************************************/ void setValue(DisplayStruct *dsp, u8 value[6], u8 dotBit) { dsp->digit[0] = value[0]; dsp->digit[1] = value[1]; dsp->digit[2] = value[2]; dsp->digit[3] = value[3]; dsp->digit[4] = value[4]; dsp->digit[5] = value[5]; dsp->dot = dotBit; } /******************************************************************************* * @简 介 段选,让某一位数码管显示指定的数字 * @输入参数 value:段码数组的序号(0~9),代表要显示的数字 * @retval ********************************************************************************/ void seg(uint8_t value) { if(value < sizeof(segCode)) // 避免数组溢出 { GPIO_Write(GPIOA, segCode[value]); // 注意:后续需保护高8位不受影响 } } /******************************************************************************** * 简介 位选,一次只能选一位。 * 参数 com:位数(取值1~4,从左到右) * 返回值 无 ********************************************************************************/ void com(uint8_t currDigit) { GPIO_Write(GPIOB, ~(0x0001<<(currDigit+11))); // 数码管位选(0有效) } /******************************************************************************** * 简介 在数码管上逐位显示其段码(由Timer中断服务函数调用) * 参数 无 * 返回值 无 ********************************************************************************/ void segDisplay(void) { seg(10); // 消隐之前的显示内容 com(dsp.currDigit); // 位选,从COM1到COM4逐次移位,实现动态显示 if(dsp.currDigit != dsp.dot) // 当前位不显示小数点 seg(dsp.digit[dsp.currDigit-1]); else // 当前位要显示小数点 GPIO_Write(GPIOA, segCode[dsp.digit[dsp.currDigit-1]]| 0x0080); if(++dsp.currDigit > FULL_DIGIT) // 从当前位右移到下一位 dsp.currDigit = 1; } 改为6位数码管
06-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值