成绩排序

成绩排序问题

题目描述
查找和排序

题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩
都按先录入排列在前的规则处理。

示例:
jack      70
peter     96
Tom       70
smith     67

从高到低  成绩
peter     96
jack      70
Tom       70
smith     67

从低到高

smith     67

jack      70
Tom      70
peter     96

输入描述:
输入多行,先输入要排序的人的个数,然后输入排序方法0(降序)或者1(升序)再分别输入他们的名字和成绩,以一个空格隔开

输出描述:
按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开

解题思路:首先想到的肯定是定义一个结构体,将输入的数据存好,然后比较分数,按要求输出即可;

可能遇到问题:如何将用户输入的数据对应存到结构体的对应变量的位置,排序算法使用stable_sort();

具体实现:


#include<bits/stdc++.h>
//这是包含所有库函数的头文件;一般不建议,但是在考试的时候可以用;
using namespace std;

struct Grade{
	char name[100];
	int score;
}grade[1000];

//从大到小排序; 
bool cmp(Grade a,Grade b){
	return a.score>b.score;
}

//从小到大;
bool cmp1(Grade a,Grade b)
{
	return a.score<b.score;
 } 
//写cmp函数是为了实现stable_sort()函数;
int main()
{
	int n,flag;
    //因为要循环测试,所以假如while循环;
	while(cin >> n >> flag){
	Grade stu[n];
    //输入n个学生,并对应输入name和score;
	for(int i=0;i<n;i++){
		scanf("%s %d",&stu[i].name,&stu[i].score);
	} 
    //判断是升序还是降序来输出;
	if(flag==0){
		stable_sort(stu,stu+n,cmp);
	}
	if(flag==1){
		stable_sort(stu,stu+n,cmp1);
	}
    
	for(int j=0;j<n;j++){
		cout << stu[j].name<<" "<<stu[j].score<<endl;
	}
    }
	return    0;
}

代码实现不难,最终结果也是ac的,但是仔细观察也是有一些遗留问题的,比如c++中scanf和cin,cout的混用问题,c++中只要你引入了库函数,是可以用scanf和printf函数的,但是具体的区别和用法并不是一两句话可以说清楚的,一般是不建议混合使用的,会出现意料之外的错误,当然如果需要仔细研究,我会添加链接。

C++输入与输出cin和cout的用法

c++的cin详细用法

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值