ACM程序设计书中题目--V(对书按照特定方式排序)

题目简述:给定书的名字,年份和价格,按照其中某一顺序进行排序。

解题思路:

1、因为书的格式确定,由名字,年份,价格组成,所以每本书可以用一个结构体对成员进行存放。

2、由于要进行排序,所以首先想到的就是sort函数,因为书的数量不超过100,所以可以定义一个数组长度100的结构体。

3、定义函数,自定义排序。按照书的名字大小排序的函数,若名字大小相同,则按照年份排序,若还相同,按照价格排序。排序先后顺序:名字,年份,价格。定义3个函数,分别首先按照名字,年份,价格进行排序。

4、主函数中对数据进行输入,之后若输入Name,则调用CompareName进行排序,其余的均相同的思路。

5、对结果进行输出。

源代码:

#include <bits/stdc++.h>
using namespace std;
struct book
{
    string a;
    int b;
    int c;
}d[100];
bool CompareName(book e,book f)
{
    if (e.a!=f.a)
    return e.a<f.a;
    else if (e.b!=f.b)
    return e.b<f.b;
    else
    return e.c<f.c;
}
bool CompareYear(book e,book f)
{
    if (e.b!=f.b)
    return e.b<f.b;
    else if (e.a!=f.a)
    return e.a<f.a;
    else
    return e.c<f.c;
}
bool ComparePrice (book e,book f)
{
    if (e.c!=f.c)
    return e.c<f.c;
    else if (e.a!=f.a)
    return e.a<f.a;
    else
    return e.b<f.b;
}
int main()
{
    int n,j=0;
    while (cin>>n)
    {
        if (n==0)
        break;
    int i;
    string w;
    for (i=0;i<n;i++)
    cin>>d[i].a>>d[i].b>>d[i].c;
    cin>>w;
    if (w=="Name")
    sort (d,d+n,CompareName);
    if (w=="Year")
    sort(d,d+n,CompareYear);
    if (w=="Price")
    sort(d,d+n,ComparePrice);
    j++;
    if (j!=1)
    cout<<endl;
    for (i=0;i<n;i++)
        cout<<d[i].a<<" "<<d[i].b<<" "<<d[i].c<<endl;
    }
    return 0;
}
解题感想:通过这个题,查阅了资料,学习了排序中函数的定义,学会了使用字符串进行比较。收货还是很大的。头两次提交出现演示错误,这是不应该的。还应该注意格式的控制,避免因一点点错A不了题,第三次改过后服务器崩了,也令我有些崩溃。但是最后A了,也是很棒棒的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值