华为OJ(成绩排序)

描述

查找和排序

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

   例示:
   jack      70
   peter     96
   Tom       70
   smith     67

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

   从低到高

   smith     67  

   Tom       70    
   jack      70    
   peter     96      

知识点 排序
运行时间限制 10M
内存限制 128
输入

输入多行,先输入要排序的人的个数,然后分别输入他们的名字和成绩,以一个空格隔开

用户名字,字符串,非空串,长度不超过20;

成绩,整数,范围【0,100】

输入排序方式,0或1,0表示成绩从高到低方式输出名字和成绩,1表示成绩从低到高方式输出名字和成绩


 

输出

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

样例输入 3 0 fang 90 yang 50 ning 70
样例输出 fang 90 ning 70 yang 50
字符串数组实现,根据flag升降排序,代码如下:
#include<iostream>
#include<string>
using namespace std;
void score_sort(string**,int,int);
int main()
{
	
	int n,flag;//flag表示排序标志 0由高到低,1由低到高
	cin>>n>>flag;
	string **s=new string*[n];	
	for(int i=0;i<n;i++)
		s[i]=new string[2];	
	for(int i=0;i<n;i++)
		cin>>s[i][0]>>s[i][1];
	score_sort(s,flag,n);
	//system("pause");
	return 0;
}
void score_sort(string** s,int flag,int n)
{
	if(flag)
	{
		for(int i=0;i<n-1;i++)
			for(int j=i+1;j<n;j++)
				if(atoi(s[i][1].c_str())>atoi(s[j][1].c_str()))
				{
					string tmp[2];
					tmp[0]=s[i][0];tmp[1]=s[i][1];
					s[i][0]=s[j][0];s[i][1]=s[j][1];
					s[j][0]=tmp[0];s[j][1]=tmp[1];
				}		
	}
	else
	{
				for(int i=0;i<n-1;i++)
			for(int j=i+1;j<n;j++)
				if(atoi(s[i][1].c_str())<atoi(s[j][1].c_str()))
				{
					string tmp[2];
					tmp[0]=s[i][0];tmp[1]=s[i][1];
					s[i][0]=s[j][0];s[i][1]=s[j][1];
					s[j][0]=tmp[0];s[j][1]=tmp[1];
				}		
	}
	for(int i=0;i<n;i++)
			cout<<s[i][0]<<" "<<s[i][1]<<endl;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值