讨论 / 奖学金C++代码
18251968697 2014-09-11 13:07:41
点我顶贴 收藏 删除
感觉很不错的是,C++支持结构体直接交换

#include <iostream>

using namespace std;

struct Grade{

int chinese;

int math;

int english;

int sum;

int i;

};

void swap(Grade *x,Grade *y){

Grade temp;

temp=*x;

*x=*y;

*y=temp;

}

int main(){

int n;

cin>>n;

Grade *x=new Grade [n];

for(int i=0;i<n;i++){

cin>>x[i].chinese>>x[i].math>>x[i].english;

x[i].sum=x[i].chinese+x[i].math+x[i].english;

x[i].i=i+1;

}

for(int i=0;i<n;i++)

for(int j=i+1;j<n;j++){

if(x[i].sum<x[j].sum){

swap(x[i],x[j]);

}

else if(x[i].sum==x[j].sum){

if(x[i].chinese<x[j].chinese)

swap(x[i],x[j]);

else if(x[i].i>x[j].i)

swap(x[i],x[j]);

}

}

for(int i=0;i<5;i++)

cout<<x[i].i<<" "<<x[i].sum<<endl;

}

#1 577866/1111@2014-09-16 23:36:48
回复 删除
这让C‘er情何以堪……
#2 2477259579@2014-09-20 12:34:13
回复 删除
#include<iostream>

#include<cstdio>

#include<cstdlib>

using namespace std;

int n,i,ma,en,j;

struct node{

int ch,num,sum;

}stu[301],*a,*b;

void input(void){

cin>>n;

for(i=0;i<n;i++){

cin>>stu[i].ch>>ma>>en;

stu[i].num=++j;

stu[i].sum=stu[i].ch+ma+en;

}

}

void output(void){

for(i=0;i<5;i++)

cout<<stu[i].num<<" "<<stu[i].sum<<endl;

}

//void work(void){

//}

int cmp(const void *p,const void *q){

a=(node *)p;b=(node *)q;

if(a->sum==b->sum&&a->ch==b->ch) return a->num-b->num;

if(a->sum==b->sum) return b->ch-a->ch;

return b->sum-a->sum;

}

int main(){

freopen("scholar.in","r",stdin);

freopen("scholar.out","w",stdout);

input();

//work();

qsort(stu,n,sizeof(stu[0]),cmp);

output();

return 0;

}

可改为C的伪C++代码

#3 2477259579@2014-09-20 12:35:38
回复 删除
回复 #2 2477259579:用的是CENA测试,在本网上测试可把主函数的一二两行文件输入输出删去
查看更多回复
提交回复