思想
维护三个最小变量 a1 a2`` a3
把每个输入进来的值与这三个变量进行对比。类似滚动数组。
有这样一个图:
if 当x<=a1小时,那么x就会成为新的a1(即成为新的最小值)
但是要从后面开始挪,a2到a3位置上成为新a3``,a1挪a2位置上成新a2。
再把x挪a1位置上成为新a1.
挪完之后如图(a-1):
else if x<=a2小比a1大的时候,那么就把x放到a2的位置作为第二小
else if x<=a3小 比a1,a2大的时候,就把x放到a3的位置上作为第三小。
因为题目要求第三小,所以最后返回a3即可。
code
#include <iostream>
using namespace std;
int main()
{
int n=0;
int a1=1000000000,a2=1000000000,1000000000;
int x=0;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>x;
if(x<=a1)
{
a3=a2;
a2=a1;
a1=x;
}
else if(x<=a2)
{
a3=a2;
a2=x;
}
else if(x<=a3)
{
a3=x;
}
if(i>=2)
{
cout<<a3<<" ";
}
}
return 0;
}