ZOJ List the Books 水~

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1727

题目大意:

给你书名、出版时间、价格,让你按照一定的顺序排序。。

其中题目会给出优先级最高的,剩下两个按书名优先级>出版时间>价格来排序。


思路:

练习sort重载的。。。

不过sort(book,book+n,cmp_by_name);的重载函数竟然不能用引用。。不然会cp好吧,我习惯写重载<运算符了。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN=100+2;
struct Book
{
	char name[MAXN];
	int year,price;
}book[MAXN];

bool cmp_by_name(Book a,Book b)
{
	int k=strcmp(a.name,b.name);
	if(k < 0)
		return true;
	else if(k > 0)
		return false;

	return a.year < b.year || (a.year==b.year && a.price<b.price);
}

bool cmp_by_price(Book a,Book b)
{
	if(a.price < b.price)
		return true;
	else if(a.price > b.price)
		return false;

	int k=strcmp(a.name,b.name);
	if(k < 0)
		return true;
	else if(k > 0)
		return false;

	return a.year<b.year;
}

bool cmp_by_year(Book a,Book b)
{
	if(a.year < b.year)
		return true;
	else if(a.year > b.year)
		return false;

	int k=strcmp(a.name,b.name);
	if(k < 0)
		return true;
	else if(k > 0)
		return false;

	return a.price<b.price;
}
int main()
{
	int n;
	int kase=0;
	while(~scanf("%d",&n),n)
	{
		if(kase++)
			puts("");

		for(int i=0;i<n;i++)
			scanf("%s%d%d",book[i].name,&book[i].year,&book[i].price);

		char cmd[20];
		scanf("%s",cmd);
		if(strcmp(cmd,"Name")==0)
			sort(book,book+n,cmp_by_name);
		else if(strcmp(cmd,"Year")==0)
				sort(book,book+n,cmp_by_year);
		else if(strcmp(cmd,"Price")==0)
				sort(book,book+n,cmp_by_price);

		for(int i=0;i<n;i++)
			printf("%s %d %d\n",book[i].name,book[i].year,book[i].price);
	}
	return 0;
}


转载于:https://www.cnblogs.com/murmured/p/5004153.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值