求最大值和最小值:
首先将数组的个数分为奇数个和偶数个,奇数时:最小值和最大值都为a[0],剩下的分组,一组两个,跟最大值,最小值比较;偶数时,对前两个进行比较,确定最大值和最小值。
#include<iostream>
using namespace std;
int find(int a[],int n)
{
int min=0,max=0,i;
if(n%2==1)
{
min=a[0];
max=a[0];
for(i=1;i<n;i+=2)
{
if(a[i]<=a[i+1])
{
if(a[i]<min)
min=a[i];
if(a[i+1]>max)
max=a[i+1];
}
else
{
if(a[i]>max)
max=a[i];
if(a[i+1]<min)
min=a[i+1];
}
}
}
else
{
if(a[0]<=a[1])
{
min=a[0];
max=a[1];
}
else
{
min=a[1];
max=a[0];
}
for(i=2;i<n;i+=2)
{
if(a[i]<=a[i+1])
{
if(a[i]<min)
min=a[i];
if(a[i+1]>max)
max=a[i+1];
}
else
{
if(a[i]>max)
max=a[i];
if(a[i+1]<min)
min=a[i+1];
}
}
}
cout<<min<<' '<<max<<endl;
return 0;
}
int main()
{
int a[100],n=0;
for(n=0;n<100;n++)
{
cin>>a[n];
if(cin.get()=='\n')
break;
}
find(a,n+1);
return 0;
}
求最小值和次小值
同上的思路:奇数时:前面两两为一组,确定最小值和次小值,然后最后一个跟最小值和次小值进行比较,最终确定最小值和次小值;偶数时,前面两两为一组,确定最小值和次小值。
#include<iostream>
using namespace std;
int find(int a[],int n)
{
int min=0,smin=0,i;
if(n%2==1)
{
if(a[0]<=a[1])
{
min=a[0];
smin=a[1];
}
else
{
min=a[1];
smin=a[0];
}
for(i=2;i<n-1;i+=2)
{
if(a[i]<=a[i+1])
{
if(a[i]<min)
{
if(a[i+1]<min)
smin=a[i+1];
else
smin=min;
min=a[i];
}
else
{
if(a[i]<smin)
smin=a[i];
else if(a[i+1]<smin)
smin=a[i+1];
}
}
else
{
if(a[i+1]<min)
{
if(a[i]<min)
smin=a[i];
else
smin=min;
min=a[i+1];
}
else
{
if(a[i+1]<smin)
smin=a[i+1];
else if(a[i]<smin)
smin=a[i];
}
}
}
if(a[n-1]<=min)
{
smin=min;
min=a[n-1];
}
else
{
if(a[n-1]<smin)
smin=a[n-1];
}
}
else
{
if(a[0]<=a[1])
{
min=a[0];
smin=a[1];
}
else
{
min=a[1];
smin=a[0];
}
for(i=2;i<n;i+=2)
{
if(a[i]<=a[i+1])
{
if(a[i]<min)
{
if(a[i+1]<min)
smin=a[i+1];
else
smin=min;
min=a[i];
}
else
{
if(a[i]<smin)
smin=a[i];
else if(a[i+1]<smin)
smin=a[i+1];
}
}
else
{
if(a[i+1]<min)
{
if(a[i]<min)
smin=a[i];
else
smin=min;
min=a[i+1];
}
else
{
if(a[i+1]<smin)
smin=a[i+1];
else if(a[i]<smin)
smin=a[i];
}
}
}
}
cout<<min<<' '<<smin<<endl;
return 0;
}
int main()
{
int a[100],n=0;
for(n=0;n<100;n++)
{
cin>>a[n];
if(cin.get()=='\n')
break;
}
find(a,n+1);
return 0;
}