【题目链接】
ybt 1112:最大值和最小值的差
OpenJudge NOI 1.9 05:最大值和最小值的差
【题目考点】
1. 求数组中最大值及其下标
- 方法1:保存最大值和下标
- 设置临时最大值变量mx,mx的初始值应该小于数组中的所有值。设临时下标变量mi。
- 遍历数组,如果数组元素a[i]比mx大,那么把a[i]赋值给mx,同时把i赋值给mi
- 循环结束后,mx就是数组中的最大值,mi就是最大值的下标。
- 方法2:只保存最大值的下标
- 设置表示最大值下标的变量mi,初始值为数组第一个元素的下标(从0开始存,mi就为0,若是从1开始存,mi就为1)
- 遍历数组,如果数组元素a[i]比a[mi]大,那么把i赋值给mi
- 循环结束后,a[mi]就是数组中的最大值,mi就是最大值的下标
2. 求数组中最小值及其下标
- 方法1:保存最小值和下标
- 设置临时最小值变量mn,mn的初始值应该大于数组中的所有值。设临时下标变量mi。
- 遍历数组,如果数组元素a[i]比mn小,那么把a[i]赋值给mn,同时把i赋值给mi
- 循环结束后,mn就是数组中的最小值,mi就是最小值的下标。
- 方法2:只保存最小值的下标
- 设置表示最小值下标的变量mi,初始值为数组第一个元素的下标(从0开始存,mi就为0,若是从1开始存,mi就为1)
- 遍历数组,如果数组元素a[i]比a[mi]小,那么把i赋值给mi
- 循环结束后,a[mi]就是数组中的最小值,mi就是最小值的下标
【题解代码】
解法1:保存最大最小值
#include <bits/stdc++.h>
using namespace std;
int main()
{//已知每个整数的绝对值不会大于10000,据此为mx,mn设置初始值
int mx = -10005, mn = 10005, n, a;//mx:最大值 mn:最小值
cin>>n;
for(int i = 0; i < n; ++i)//循环n次,读入数字
{
cin>>a;
if(a > mx)
mx = a;
if(a < mn)
mn = a;
}
cout<<mx - mn;
return 0;
}
解法2:设数组,保存最大值和最小值的下标
#include <bits/stdc++.h>
using namespace std;
int main()
{
int mxi, mni, n, a[10005];//mxi:最大值下标 mni:最小值下标
cin>>n;
mxi = mni = 0;
for(int i = 0; i < n; ++i)//循环n次,读入数字
{
cin>>a[i];
if(a[i] > a[mxi])
mxi = i;
if(a[i] < a[mni])
mni = i;
}
cout<<a[mxi] - a[mni];
return 0;
}