题目描述:查找和排序题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩降序输出时,先录入排列在前。
例示:
jack 70
peter 96
Tom 70
smith 67
从高到低 成绩
peter 96
jack 70
Tom 70
smith 67
从低到高
smith 67
Tom 70
jack 70
peter 96
输入描述:输入多行,先输入要排序的人的个数,然后分别输入他们的名字和成绩,以一个空格隔开
成绩,整数,范围【0,100】
输出描述:按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开输入排序方式,0或1,0表示成绩从高到低方式输出名字和成绩,1表示成绩从低到高方式输出名字和成绩
输入例子:3 0 fang 90 yang 50 ning 70
输出例子:
fang 90
ning 70
yang 50
算法实现:
#include<iostream> #include<string> #include<list> using namespace std; //************************************************ // * Author: 赵志乾 // * Date: 2017-2-21 // * Declaration: All Rigths Reserved !!! //***********************************************/ class node { public: int score; string name; node():score(0),name("") {} node(int s,string n):score(s),name(n) {} }; void OutPut(list<node>&ret,int flag) { if(flag==0) { for(list<node>::reverse_iterator ptr=ret.rbegin();ptr!=ret.rend();ptr++) { cout<<ptr->name<<' '<<ptr->score<<endl; } } else { for(list<node>::iterator ptr=ret.begin();ptr!=ret.end();ptr++) { cout<<ptr->name<<' '<<ptr->score<<endl; } } } int main() { int num,flag; cin>>num>>flag; list<node>ret; for(int i=0;i<num;i++) { int score; string name; cin>>name>>score; if(ret.empty()) { ret.push_back(node(score,name)); continue; } int nodenum=ret.size(); list<node>::iterator ptr; for(list<node>::iterator ptr=ret.begin();ptr!=ret.end();ptr++) { if(score<=ptr->score) { ret.insert(ptr,node(score,name)); break; } } if(nodenum==ret.size()) ret.push_back(node(score,name)); } OutPut(ret,flag); return 0; }