找出元素的最大值和次最大值
方法一:排序后查找,直接调用sort()函数
特别注意sort()函数的用法
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[100];
int n=1;
cin>>a[n++]; //将第一个数录入数组a[1]中,特别注意n++,这样在下面的时候n才会是2
while(cin.get()!='\n'){
cin>>a[n++]; //当全部录入3 2 1完毕后,数组下标n会变为4,原因在于++
}
sort(a+1,a+n); //排序时从a+1地址开始,即a[1],结束时为数组最后一个元素下标的下一个,即a[n]
cout<<a[n-1]<<" "<<a[n-2]; //排序后输出最后两个元素即可。
return 0;
}
方法二 循环遍历比较数组元素
将数组元素前两个看作最大和次最大值,然后从第三个开始循环比较,找出结果。
#include <iostream>
using namespace std;
int main(){
int a[100];
int n=1;
cin>>a[n++];
while(cin.get()!='\n'){ //将数列从数组下标1开始录入,最后总数为n-1
cin>>a[n++];
}
int da=a[1];
int cida=a[2]; //先假设a[1]最大,a[2]次大,以此初始化
if(a[1]<a[2]){ //如果反了,则换过来
swap(da,cida);
}
for(int i=3;i<=n-1;i++){ //从第三个数开始向后遍历至最后一个数
if(a[i]>da){ //如果a[i]比现在最大值都大,则最大值与次大值都需要变
cida=da;
da=a[i];
}
else if(a[i]<da&&a[i]>cida){ //如果a[i]在最大与次大值之间,只要要变次大值
cida=a[i];
}
}
cout<<da<<" "<<cida; //输出结果
return 0;
}
方法三:利用冒泡排序,只循环两次就可
#include<bits/stdc++.h>
using namespace std;
int main(){
int num;
vector<int>a;
while(cin>>num){
a.push_back(num); //特别注意先放进去,再判断是否是换行符
if(cin.get()=='\n') break;
}
int length=a.size();
for(int i=0;i<=1;i++){ //循环两次,找两个最大值
for(int j=0;j<=length-2;j++){ //从开头到结尾进行比较
if(a[j]>a[j+1]){
swap(a[j],a[j+1]);
}
}
}
cout<<a[length-1]<<" "<<a[length-2];
return 0;
}