noi寒假刷题之旅_1.10编程基础之简单排序(10题)

»1.10编程基础之简单排序(10题)

01:谁考了第k名

#include<iostream>
#include<string>
#include<algorithm>
#define MAX 200
using namespace std;
struct S
{
	string id;
	double score;
}stu[MAX];
bool cmp(S a,S b)
{
	if(a.score<b.score)return false;
	return true;
}
int main()
{
	int n,k;
	cin>>n>>k;
	for(int i=0;i<n;++i)
	{
		cin>>stu[i].id>>stu[i].score;
	}
	sort(stu,stu+n,cmp);
	cout<<stu[k-1].id<<" "<<stu[k-1].score;
}

02:奇数单增序列

#include<iostream>
#include<string>
#include<algorithm>
#define MAX 200
using namespace std;
int stu[MAX];
int main()
{
	int n,k,j=0;
	cin>>n;
	for(int i=0;i<n;++i)
	{
		cin>>k;
		if(k%2)stu[j++]=k;				
	}
	sort(stu,stu+j);
	for(int i=0;i<j-1;++i)
	{
	   cout<<stu[i]<<",";
	}
	cout<<stu[j-1];	
}

03:成绩排序

#include<iostream>
#include<string>
#include<algorithm>
#define MAX 200
using namespace std;
struct S
{
	string name;
	int score;	
}stu[MAX];
bool cmp(S a,S b)
{
	if(a.score<b.score)
	{
		return false;
	}
	else if(a.score==b.score)
	{
		return a.name<b.name;
	}
	return true;
}
int main()
{
	int n,k,i=0;
	cin>>n;
	for(i=0;i<n;++i)cin>>stu[i].name>>stu[i].score;		
	sort(stu,stu+n,cmp);
	for(i=0;i<n;++i)cout<<stu[i].name<<" "<<stu[i].score<<endl;
}

04:奖学金

#include<iostream>
#include<string>
#include<algorithm>
#define MAX 400
using namespace std;
struct S
{
	int id;
	int china;
	int math;
	int english;
	int sum;	
}stu[MAX];
bool cmp(S a,S b)
{
	if(a.sum==b.sum)
	{
		if(a.china==b.china)
		{
			return a.id<b.id;
		}
		else
		{
			return a.china>b.china;
		}
	}
	else
	{
		return a.sum>b.sum;
	}
	return true;
}
int main()
{
	int n,k,i=0;
	cin>>n;
	for(i=0;i<n;++i)
	{
		stu[i].id=i+1;
		cin>>stu[i].china>>stu[i].math>>stu[i].english;
		stu[i].sum=stu[i].china+stu[i].math+stu[i].english;
	}		
	sort(stu,stu+n,cmp);
	for(i=0;i<5;++i)cout<<stu[i].id<<" "<<stu[i].sum<<endl;
}

05:分数线划定

#include<iostream>
#include<string>
#include<algorithm>
#define MAX 6000
using namespace std;
struct S
{
	int k;
	int s;	
}stu[MAX];
bool cmp(S a,S b)
{
	if(a.s==b.s)
	{
		return a.k<b.k;
	}
	else
	{
		return a.s>b.s;
	}
}
int main()
{
	int n,m,k,i=0;
	cin>>n>>m;
	for(i=0;i<n;++i)
	{
		cin>>stu[i].k>>stu[i].s;
	}
	
	sort(stu,stu+n,cmp);
	m=(int)m*1.5;	
	int mark=stu[m-1].s;
	int j=0;
	for(i=0;i<n;++i)
	{
		if(stu[i].s>=mark) ++j;
	}
	cout<<mark<<" "<<j<<endl;
	for(i=0;i<j;++i)
	{
		cout<<stu[i].k<<" "<<stu[i].s<<endl;
	}
}
	

06:整数奇偶排序

#include<iostream>
#include<string>
#include<algorithm>
#define MAX 6000
using namespace std;
bool od(int a,int b)
{
	return a>b;
}
bool er(int a,int b)
{
	return a<b;
}
int odd[10];
int err[10];
int main()
{
	int n,m,k,o=0,e=0,i=0;
	for(i=0;i<10;++i)
	{
		cin>>k;
		if(k%2) odd[o++]=k;
		else err[e++]=k;
	}
	if(o!=0) sort(odd,odd+o,od);
	if(e!=0) sort(err,err+e,er);	
	for(i=0;i<o;++i)cout<<odd[i]<<" ";
	for(i=0;i<e-1;++i)cout<<err[i]<<" ";
	if(e!=0)cout<<err[i];
}
	

07:合影效果

#include<iostream>
#include<string>
#include<algorithm>
#define MAX 6000
using namespace std;
bool od(double a,double b)
{
	return a<b;
}
bool er(double a,double b)
{
	return a>b;
}
double odd[50];
double err[50];
int main()
{
	int n,m,k,o=0,e=0,i=0;
	double t;
	string S;
	cin>>n;
	for(i=0;i<n;++i)
	{
		cin>>S>>t;
		if(S=="male")odd[o++]=t;
		if(S=="female")err[e++]=t;
	}
	sort(odd,odd+o,od);
	sort(err,err+e,er);
	for(i=0;i<o;++i)printf("%.2f ",odd[i]);
	for(i=0;i<e-1;++i)printf("%.2f ",err[i]);
	printf("%.2f",err[i]);
}
	

08:病人排队

#include<iostream>
#include<string>
#include<algorithm>
#define MAX 6000
using namespace std;
struct S
{
	int xl;
	string id;
	int age;
}peo[MAX];
bool cmp(S a,S b)
{
	if(a.age>=60&&b.age>=60)
	{
		if(a.age==b.age)
		{
			return a.xl<b.xl;
		}
		else
		{
			return a.age>b.age;
		}
	}
	else if(a.age<60&&b.age<60)
	{
		return a.xl<b.xl;
	}
	else
	{
		return a.age>b.age;
	}	
}
int main()
{
	int n,m,k,o=0,e=0,i=0;
	double t;
	string S;
	cin>>n;
	for(i=0;i<n;++i)
	{
		peo[i].xl=i;
		cin>>peo[i].id>>peo[i].age;
	}
	sort(peo,peo+n,cmp);
	for(i=0;i<n;++i)cout<<peo[i].id<<endl;
}
	

09:明明的随机数

#include<iostream>
#include<string>
#include<algorithm>
#define MAX 6000
using namespace std;
int peo[MAX];
int n;
bool cmp(int &a,int &b)
{
	return a<b;
}
int main()
{
	int m,k,o=0,e=0,i=0;
	cin>>n;
	k=n;
	for(i=0;i<n;++i)
	{	
		cin>>peo[i];
		for(int j=i-1;j>=0;--j)
		{
			if(peo[j]==peo[i])
			{
				i--;
				n--;
				break;		
			}	
		}
	} 
	sort(peo,peo+n,cmp);
	cout<<n<<endl;
	for(i=0;i<n-1;++i)cout<<peo[i]<<" ";
	cout<<peo[i];
}
	

10:单词排序

#include<iostream>
#include<string>
#include<algorithm>
#define MAX 6000
using namespace std;
string peo[MAX];
int n;
int main()
{
	int i=0,j=0;
	while(cin>>peo[j])
	{

		for(int k=j-1;k>=0;--k)
		{
			if(peo[j]==peo[k])
			{
				j--;
				break;
			}
		}		
		j++;
	}
	sort(peo,peo+j);
	for(i=0;i<j-1;++i)cout<<peo[i]<<endl;
	cout<<peo[i];
}
	

  

posted @ 2020-01-27 13:18  东坡肉肉君  阅读(1442)  评论(0)    收藏  举报