排序(sort函数,cmp函数),结构体(struct函数)的应用

买东西

题目描述
有n本书在甩卖,有些书的价格是负值,如果买到负值的书,就会获得相应的钱(绝对值),但最多可以买m本,求最多能赚多少钱。

输入格式
第一行输入两个整数n,m用空格隔开(1<=m<=n<=100),表示书的本数和最多能买m本
接下来的n行。每行一个整数ai(-1000<=ai<=1000)表示书的价格
输出格式
输出能赚多少钱。

样例输入
5 3
-6 0 35 -2 4

样例输出
8

#include <iostream>
#include <algorithm>
using namespace std;
const int Max=100+5;
int a[Max];
int main()
{
	int n,m;  int ans=0;
	cin>>n>>m;
	for (int i=1;i<=n;i++)
    	cin>>a[i];
    sort (a+1,a+n+1);
    for (int i=1;i<=m;i++)
    {
    	if (a[i]>0)  break;
    	ans-=a[i];
	}
	cout<<ans;
	return 0;
}

巧克力豆

题目描述
39考试取得了好成绩,妈妈奖励他一罐巧克力豆,39现在有好多巧克力豆,于是他打算吃掉它们。突然,他冒出了一个想法,我能不能将这些巧克力豆按从大到小的顺序来吃?
Unfortunately,39的巧克力豆太多了,而且是混乱放在一起的,39觉得给巧克力豆排序实在是太麻烦了,所以请你来帮39把巧克力豆排好序。

输入格式
第一行是一个整数n,表示有n颗巧克力豆。
第二行n个整数,表示每个巧克力豆的大小。

输出格式
输出一行,n个整数。表示排好序的巧克力豆的大小(从大到小)。

样例输入
6
3 9 4 6 5 1

样例输出
9 6 5 4 3 1

#include <iostream>
#include <algorithm>
using namespace std;

bool cmp(int a,int b)
{
	return a>b;
}

const int Max=1000000+5;
int a[Max];
int main()
{
	int n;  cin>>n;
	for (int i=1;i<=n;i++)
		cin>>a[i];
	sort (a+1,a+n+1,cmp);
	for (int i=1;i<=n;i++)
	    cout<<a[i]<<" ";
	return 0;
}

成绩单

题目描述
现在你得到了一份高考成绩单,你需要处理这份成绩单,使得他按照语文成绩为第一关键字降序,数学成绩为第二关键字降序,外语成绩为第三关键字降序,物理成绩为第四关键字降序,化学成绩为第五关键字降序,生物成绩为第六关键字降序,学号为为第七关键字升序排序。

输入格式
一个整数n,表示总人数接下来一共有n行,每行7个整数,分别是学号、语文、数学、外语、物理、化学和生物。输入数据按照学号升序排序

输出格式
共n行,每行7个整数,表示排序好的结果,按照学号、语文、数学、外语、物理、化学和生物的顺序输出。

样例输入
3
1 10 10 10 10 12 10
2 60 59 58 61 63 70
3 98 99 78 87 65 100

样例输出
3 98 99 78 87 65 100
2 60 59 58 61 63 70
1 10 10 10 10 12 10

原版做法:

#include <iostream>
#include <algorithm>
using namespace std;
struct node
{
	int g,a,b,c,d,e,f;
};
bool cmp(node a,node b)
{
	if (a.a==b.a&&a.b==b.b&&a.c==b.c&&a.d==b.d&&a.e==b.e&&a.f==b.f)
	    return a.g<b.g;
	if (a.a==b.a&&a.b==b.b&&a.c==b.c&&a.d==b.d&&a.e==b.e)
	    return a.f>b.f;
	if (a.a==b.a&&a.b==b.b&&a.c==b.c&&a.d==b.d)
	    return a.e>b.e;
	if (a.a==b.a&&a.b==b.b&&a.c==b.c)
	    return a.d>b.d;
	if (a.a==b.a&&a.b==b.b)
	    return a.c>b.c;
    if (a.a==b.a)
	    return a.b>b.b;
	return a.a>b.a;
}
const int Max=50000+5;
node a[Max];
int main()
{
	int n;  cin>>n;
	for (int i=1;i<=n;i++)
		cin>>a[i].g>>a[i].a>>a[i].b>>a[i].c>>a[i].d>>a[i].e>>a[i].f;
	sort (a+1,a+n+1,cmp);
	for (int i=1;i<=n;i++)
	    cout<<a[i].g<<" "<<a[i].a<<" "<<a[i].b<<" "<<a[i].c<<" "<<a[i].d<<" "<<a[i].e<<" "<<a[i].f<<endl;
	return 0;
}

改进:

#include <iostream>
#include <algorithm>
using namespace std;
const int Max=50010;
struct stu
{
	int id,chi,mat,eng,phy,che,blo;
};
stu a[Max];
bool cmp(stu x,stu y)
{
	if (x.chi!=y.chi)
	    return x.chi>y.chi;
	if (x.mat!=y.mat)
	    return x.mat>y.mat;
	if (x.eng!=y.eng)
	    return x.eng>y.eng;
	if (x.phy!=y.phy)
	    return x.phy>y.phy;  
	if (x.che!=y.che)
	    return x.che>y.che;
	if (x.blo!=y.blo)
	    return x.blo>y.blo; 
	return x.id<y.id;
}
int main()
{
	int n;
	cin>>n;
	for (int i=0;i<n;i++)
		cin>>a[i].id>>a[i].chi>>a[i].mat>>a[i].eng
		>>a[i].phy>>a[i].che>>a[i].blo;
	sort(a,a+n,cmp);
	for (int i=0;i<n;i++)
		cout<<a[i].id<<" "<<a[i].chi<<" "<<a[i].mat<<" "<<a[i].eng
		<<" "<<a[i].phy<<" "<<a[i].che<<" "<<a[i].blo<<endl;	
	return 0;
}
  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值