题目简述:给定书的名字,年份和价格,按照其中某一顺序进行排序。
解题思路:
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了,也是很棒棒的。