文章目录
题目 1227: 日期排序
原题传送门
时间限制: 1Sec 内存限制: 128MB 提交: 984 解决: 346
题目描述
有一些日期,日期格式为“MM/DD/YYYY”。编程将其按日期大小排列。
输入
无
输出
无
样例输入
15/12/1999
10/21/2003
10/22/2003
02/12/2004
11/30/2005
12/31/2005
样例输出
15/12/1999
10/21/2003
10/22/2003
02/12/2004
11/30/2005
12/31/2005
题解:
这道题本身很简单 你可以像我一开始一样用for循环去写
就像这样:
int i,j;
for(i=0;i<len-1;i++)
for(j=0;j<len-1-i;j++){
if(d[j].year>d[j+1].year)
swap(d[j],d[j+1]);
else if(d[j].year==d[j+1].year){
if(d[j].month>d[j+1].month)
swap(d[j],d[j+1]);
else if(d[j].month==d[j+1].month)
if(d[j].day>d[j+1].day)
swap(d[j],d[j+1]);
}
}
/*
void swap(date d1,date d2){
date d3;
d3=d2;
d2=d1;
d1=d3;
}
*/
但是,C++中STL本身已经提供了性能很好(我们自己编写的算法很难超过他的效率)的sort函数,所以我们只需要去编写对应的小于(cmp)规则即可。
同时注意到输出中是有不足补0的情况的,还需要了解一下cout控制输出的规则。
02/12/2004
代码实现
#include <iostream>
#include <algorithm>
#include<iomanip>
using namespace std;
typedef struct date{
int month;
int day;
int year;
} date;
date d[1001];
int len;
bool cmp(date d1,date d2){
if(d1.year!=d2.year)
return d1.year < d2.year;
else if(d1.month!=d2.month)
return d1.month < d2.month;
else if(d1.day!=d2.day)
return d1.day < d2.day;
}
int main(){
date td;
//接受输入
int len=0,i;
char c;
while(cin>>d[len].month>>c>>d[len].day>>c>>d[len].year)
len++;
sort(d,d+len,cmp);
for(i=0;i<len;i++)
cout<<setw(2)<<setfill('0')<<d[i].month<<'/'<<setw(2)<<setfill('0')<<d[i].day<<'/'<<d[i].year<<endl;
}
cout输出控制
使用控制符时,要在程序的头上加头文件iomanip.h。
主题推荐: