这个题就是让我们对书按照名字,年份或者价格为主要顺序,以名字,年份,价格顺序的顺序为次要顺序对书目进行排序工作。
思路:这个题所排序的对象较多,排序规则繁杂,于是选择使用结构体绑定书目的三项内容,进行排序。
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
#include<iostream>
#include<string>
using namespace std;
struct book
{
string name;
int year;
int price;
};
struct book a[100];
int main()
{
int n,m,i,j,line;
string x;
struct book o;
line=0;
while (cin>>n&&n!=0)
{
for (i=1;i<=n;i++)
cin>>a[i].name>>a[i].year>>a[i].price;
cin>>x;
if (x=="Name")
for (i=1;i<=n;i++)
for (j=i+1;j<=n;j++)
{
if (a[i].name>a[j].name)
o=a[i],a[i]=a[j],a[j]=o;
else if (a[i].year>a[j].year&&a[i].name==a[j].name)
o=a[i],a[i]=a[j],a[j]=o;
else if (a[i].year==a[j].year&&a[i].price>a[j].price&&a[i].name==a[j].name)
o=a[i],a[i]=a[j],a[j]=o;
}
else if (x=="Year")
for (i=1;i<=n;i++)
for (j=i+1;j<=n;j++)
{
if (a[i].year>a[j].year)
o=a[i],a[i]=a[j],a[j]=o;
else if (a[i].year==a[j].year&&a[i].name>a[j].name)
o=a[i],a[i]=a[j],a[j]=o;
else if (a[i].year==a[j].year&&a[i].price>a[j].price&&a[i].name==a[j].name)
o=a[i],a[i]=a[j],a[j]=o;
}
else if (x=="Price")
for (i=1;i<=n;i++)
for (j=i+1;j<=n;j++)
{
if (a[i].price>a[j].price)
o=a[i],a[i]=a[j],a[j]=o;
else if (a[i].name>a[j].name&&a[i].price==a[j].price)
o=a[i],a[i]=a[j],a[j]=o;
else if (a[i].year>a[j].year&&a[i].price==a[j].price&&a[i].name==a[j].name)
o=a[i],a[i]=a[j],a[j]=o;
}
if (line)cout<<endl;
for (i=1;i<=n;i++)
{
cout<<a[i].name<<" "<<a[i].year<<" "<<a[i].price<<endl;
}
line++;
}
}