7-3 数据的最大值问题(重载+函数模板)

两个类如下设计:类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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值