在别的博客看见这道题,要不是晦涩难懂,要不是算法有缺陷。故在此重写
#include <iostream>
using namespace std;class Student
{
public :
Student (int x,int c):xueHao(x),chengJi(c){}
void selectMax(Student *);//直接在此处声明为friend下面的定义前面的void Student::可省去
private :
int xueHao;
int chengJi;
};
void Student::selectMax(Student *p)
{
for (int i=0;i<5;i++)
{
int k=0;
for (int j=0;j<5;j++)
{
if((p+i)->chengJi>=(p+j)->chengJi)
k++;
if(k==5)
{
cout<<"最高成绩为:"<<(p+i)->chengJi<<endl;
cout<<"学生学号为:"<<(p+i)->xueHao;
break;
}
}
if(k==5) break;
}
}
int main()
{
Student a[5]={
Student(1,90),
Student(2,80),
Student(3,100),
Student(4,60),
Student(5,70)};
a->selectMax(a);
return 0;
}
可以把selectMax部分使用冒泡排序,不管感觉时间复杂度差不多。
void selectMax(Student *p)
{
for ( int i=0;i<5-1;i++)
{
for (int j=0;j<5-i-1;j++)
if((p+j)->chengJi>(p+j+1)->chengJi)
{
int k;
k=(p+j)->chengJi;
(p+j)->chengJi=(p+j+1)->chengJi;
(p+j+1)->chengJi=k;
/*
因为成绩排序的变化,学号也要跟着变化,不然答案错误
*/
k=(p+j)->xueHao;
(p+j)->xueHao=(p+j+1)->xueHao;
(p+j+1)->xueHao=k;
}
}
cout<<"最高成绩为:"<<(p+4)->chengJi<<endl;
cout<<"学生学号为:"<<(p+4)->xueHao;
}