编程实现:相邻身高差
时间限制:MS
内存限制:KB
题目描述:
有N(4N)名同学站成一队,已知每名同学的身高(单位:厘米),请比较该队中任意相邻两名同学的身高差(取正值),并输出最大的身高差。
例如:N=8,8名同学的身高分别是、、、、、、、.相邻两名同学的身高差依次是31、24、38、22、2、11、14,其中最大身高差是38.
输入描述
第一行输入一个正整数N(4N),表示站队的同学人数
第二行输入N个正整数(80正整数),表示队列中学生的身高(单位:厘米),相邻两个正整数之间用一个空格隔开
输出描述
输出一个非负整数,表示相邻两名同学中最大身高差。
样例输入
8
样例输出
38
题解一:
首先根据题目描述,可以发现输入中给出了每名同学的身高,并且要求输出相邻两名同学中最大的身高差,因此我们需要先对输入进行处理,得到每个相邻身高差,并找出其中的最大值。
具体实现:
我们可以使用一个数组来存储输入的每个同学的身高,然后用一个循环遍历该数组,对于每个元素,计算其与前一个元素的差值,将差值取绝对值后与当前的最大身高差进行比较,如果大于当前最大身高差,则更新最大身高差。最后输出最大身高差即可。
具体代码如下:
题解代码#includeiostream
#includecmath
usingnamespacestd;
intmain()
{
intn;
cinn;//输入人数
intheights[n];
for(inti=0;in;i++)
{
cinheights[i];//输入每个人的身高
}
intmax_diff=0;//最大身高差
for(inti=1;in;i++)
{
intdiff=abs(heights[i]-heights[i-1]);//计算相邻两名同学的身高差
if(diffmax_diff)
{
max_diff=diff;//更新最大身高差
}
}
coutmax_diffendl;//输出最大身高差
return0;
}
注意,这里需要使用绝对值函数abs来计算身高差,否则会出现负数。
题解二:
当然,这个题也可以不使用数组,题目要求比较队列中相邻两个同学的身高差,求出最大的身高差。我们可以通过循环遍历整个队列,依次比较相邻两个同学的身高差,找出最大的身高差。
具体实现如下:
1.首先输入第一个同学的身高,将其保存为上一个同学的身高;
2.再输入第二个同学的身高,将其保存为当前同学的身高;
3.从第三个同学开始,依次读入每个同学的身高,与上一个同学的身高相比较,得出身高差;
4.如果当前身高差大于已知的最大身高差,更新最大身高差;
5.将当前同学的身高保存为上一个同学的身高,继续循环遍历;
6.最后输出最大身高差。
需要注意的是,输入身高的过程中需要特别注意第一个同学和第二个同学的身高,因为第一个同学没有前面的同学与之比较,第二个同学没有后面的同学与之比较。同时,在循环中需要不断更新上一个同学和当前同学的身高。
题解代码#includeiostream
usingnamespacestd;
intmain()
{
intn,max=0;//n表示队列中同学的人数,max表示最大身高差,初始值为0
intl,c;//l表示前一个同学的身高,c表示当前同学的身高
cinnlc;//先输入两个同学的身高
for(inti=3;i=n;i++)//循环读入后面的同学的身高
{
inth;
cinh;
if(h-cmax)//更新最大身高差
{
max=h-c;
}
l=c;//更新上一个同学的身高
c=h;//更新当前同学的身高
}
coutmaxendl;//输出最大身高差
return0;
}