两个类如下设计:类time有三个数据成员,hh,mm,ss,分别代表时,分和秒,并有若干构造函数和一个重载-(减号)的成员函数。类date有三个数据成员,year,month,day分别代表年月日,并有若干构造函数和一个重载>(<)(大于号或者小于号)的成员函数。
要求设计一个函数模板template <\class T>\ double maxn(T x[], int len) 对int,float,time和date或者其他类型的数据,返回最大值。
主函数有如下数据成员:
int intArray[100];
double douArray[100];time timeArray[100];
date dateArray[100];
其中,hh = 3600 * ss, mm = 60 * ss, year = 365 * day, month = 30 * day,对于time和date类型,数据在转换成ss或者day后进行运算。
输入格式:
每行为一个操作,每行的第一个数字为元素类型,1为整型元素,2为浮点型元素,3为time类型,4为date类型,若为整型元素,接着输入整型数据,以0结束。若为浮点型元素,接着输入浮点型数据,以0结束。若为time型元素, 输入time型数据(hh1 mm1 ss1 hh2 mm2 ss2),以0结束。若为date型数据,输入date型数据(year1 month1 day1 year2 month2 day2),以0结束。输入-1时表示全体输入结束。
输出格式:
对每次输入,输出一个最大值。
样例输入:
1 4 5 9 3 7 0
2 4.4 5.5 6.9 3.2 2.7 0
3 18 21 22 18 20 31 18 21 49 0
4 2013 5 14 2013 5 15 2013 4 1 0
-1
样例输出:
9
6.9
18 21 49
2013 5 15
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include<bits/stdc++.h>
using namespace std;
template <class T>
T maxn(T x[], int len) {
T max=x[0];
for (int i = 0; i < len; i++) {
if (x[i] > max)
max = x[i];
}
return max;
}
class Time{
private:
int hh,mm,ss;
public:
Time(int hh=0,int mm=0,int ss=0):hh(hh),mm(mm),ss(ss){}
bool operator>(Time b){
if(hh>b.hh)return 1;
if(mm>b.mm)return 1;
if(ss>b.ss)return 1;
else return 0;
}
void printtime(){
cout<<hh<<" "<<mm<<" "<<ss<<endl;
}
};
class Date{
private:
int year,month,day;
public:
Date(int y=0,int m=1,int d=1):year(y),month(m),day(d){}
bool operator>(Date b){
if(year>b.year)return 1;
if(month>b.month)return 1;
if(day>b.day)return 1;
else return 0;
}
void printdate(){
cout<<year<<" "<<month<<" "<<day<<endl;
}
};
int main(){
int n;
while(cin>>n){
if(n==-1)break;
if(n==1){
int x[100];
int len=0,m;
while(cin>>m){
if(m==0)break;
x[len]=m;
len++;
}
if(len)cout<<maxn(x,len)<<endl;
}
if(n==2){
double x[100];
int len=0;
double m;
while(cin>>m){
if(m==0)break;
x[len]=m;
len++;
}
if(len)cout<<maxn(x,len)<<endl;
}
if(n==3){
Time x[100];
int h,m,s,len=0;
while(cin>>h){
if(h==0)break;
cin>>m>>s;
Time a(h,m,s);
x[len]=a;
len++;
}
if(len)maxn(x,len).printtime();
}
if(n==4){
Date x[100];
int y,m,d,len=0;
while(cin>>y){
if(y==0)break;
cin>>m>>d;
Date a(y,m,d);
x[len]=a;
len++;
}
if(len)maxn(x,len).printdate();
}
}
return 0;
}