1 写一个函数找出一个整数数组中,第二大的数 (microsoft)
答案:
const int MINNUMBER = -32767 ;
int find_sec_max( int data[] , int count)
{
int maxnumber = data[0] ;
int sec_max = MINNUMBER ;
for ( int i = 1 ; i < count ; i++)
{
if ( data[i] > maxnumber )
{
sec_max = maxnumber ;
maxnumber = data[i] ;
}
else
{
if ( data[i] > sec_max )
sec_max = data[i] ;
}
}
return sec_max ;
}
举一反三,求第 i 大的数, c程序如下:
#include <iostream.h>
/* ---------------------------------------- */
/* 求最大值 */
/* ---------------------------------------- */
int max(int *a,int n)
{
int max,i,m;
max=a[0];
for(i=0;i<n;++i){
if(a[i]>=max){
max=a[i];
m=i;
}
}
return m;
}
void findnum(int *a,int n,int num)
{
int i,p,val;
int *b=a;
int no=num-1;
int pos=0;
while(no){
p=max(a,n);
b[p]=0;
--no;
}
val=a[0];
for(i=0;i<n;++i){
if((a[i]!=0)&&(a[i]>val)){
val=a[i];
pos=i;
}
}
cout<<"第 "<<num<<" 大元素的值: "<<"a["<<pos<<"]= "<<a[pos]<<endl;
}
/* ---------------------------------------- */
/* 主程序:
/* ---------------------------------------- */
void main()
{
int a[10]={46,14,38,74,96,65,8,49,55,27};
int i;
cout<<"/n原始数据为: ";
for(i=0;i<10;i++)
cout<<a[i]<<" ";
cout<<endl<<endl;
// findnum(a,10,1); // 求第1大数的程序(取值1-10)
// findnum(a,10,2); // 求第2大数的程序(取值1-10)
findnum(a,10,3); // 求第3大数的程序(取值1-10)
}