成绩排序 描述 给出班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出,如果有

描述给出班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出,如果有相同分数则名字字典序小的在前。关于输入第一行为n(0关于输出把成绩单按分数从高到低的顺序进行排序并... 描述
给出班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出,如果有相同分数则名字字典序小的在前。

关于输入
第一行为n (0

关于输出
把成绩单按分数从高到低的顺序进行排序并输出,每行包含名字和分数两项,之间有一个空格

例子输入
4
Kitty 80
Hanmeimei 90
Joey 92
Tim 28

例子输出
Joey 92
Hanmeimei 90
Kitty 80
Tim 28

提示
可以用struct来保存姓名和分数
展开
 我来答
White_MouseYBZ
推荐于2016-12-02 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:7044万
展开全部
不知你是否需要C的,这里提供一段代码供参考:
#include "stdafx.h"
#include "stdio.h"//
#include "stdlib.h"//
struct student{
char Name[16];
int Score;
};

void main(void){/*主程序*/
struct student *pstu,**px,*temp;
int nRec,i,j;
printf("请输入录入数...\nnRec=");
scanf("%d",&nRec);
pstu=(struct student *)malloc(nRec*sizeof(struct student));
px=(struct student **)malloc(nRec*sizeof(struct student *));
if(!pstu || !px){
printf("内存分配失败...");
exit(0);
}
printf("请录入姓名和成绩(间隔隔开)...\n");
for(i=0;i<nRec;i++){
printf("记录%d:",i+1);
scanf("%s%d",&(pstu+i)->Name,&(pstu+i)->Score);
px[i]=pstu+i;
}

for(i=0;i<nRec;i++)
for(j=i+1;j<nRec;j++)
if(px[i]->Score<px[j]->Score){
temp=px[j];
px[j]=px[i];
px[i]=temp;
}

for(i=0;i<nRec;i++)
printf("%s %d\n",px[i]->Name,px[i]->Score);
free(pstu);
free(px);
printf("\n");
}
Heorbrine
2018-08-01
知道答主
回答量:2
采纳率:0%
帮助的人:1693
展开全部

提供C++的代码与注释:

#include <iostream>
#include <algorithm>//使用快排函数sort 
using namespace std;
struct student{//定义结构体 
 int score;//为第i个学生的成绩 
 string name;//为第i个学生的名字 
};
int n;//人数
bool cmp(const student a,const student b){//因为每次比较有两个学生,所以要用两次结构体得到a学生和b学生
 if(a.score != b.score) return a.score > b.score;//比较两个学生的分数
 return a.name < b.name;//如果分数相同就按字典序排,由于‘y’的ASCII码比‘z’的ASCII码小所以用<号 
}
int main(){
 cin >> n;
 student a[n];//有n个学生就有n个成绩和名字, 
 for(int i = 0;i < n;i ++) cin >> a[i].name >> a[i].score;
 sort(a,a + n,cmp);//排序
 for(int i = 0;i < n;i ++) cout << a[i].name << " " << a[i].score << endl;  
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2018-07-16
展开全部
#include<bits/stdc++.h>   using namespace std;const int maxn=100001;int n;struct node  {
string name;   
int fs;                                         }a[maxn];   //                                                           bool comp(node a,node b)                  {  //                                                         
if (a.fs==b.fs) return a.name<b.name;  
else return a.fs>b.fs;  }void sca()        {
cin>>n;     
for (int i=0;i<n;i++)
  cin>>a[i].name>>a[i].fs;  }int main(){
sca();  
sort(a,a+n,comp);  
for (int i=0;i<n;i++)
  cout<<a[i].name<<" "<<a[i].fs<<endl;  
return 0;}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式