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

题目:

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

代码:

#include<iostream>
#include<cmath>
using namespace std;
template <typename T>
T maxn(T a[],int n);
class Time {
		int hh, mm, ss;
	public:
		Time(int h=-1,int m=-1,int s=-1):hh(h),mm(m),ss(s) {}
		void set_time(int h, int m, int s) {
			hh = h;
			mm = m;
			ss = s;
		}
		friend int operator-(Time &t1,Time &t2);
		friend bool operator>(Time &d1, Time &d2);
		friend ostream & operator<<(ostream &output,Time &t);
};
ostream &operator << (ostream &output,Time &t) {
	output << t.hh << " " << t.mm << " " << t.ss  ;
	return output;
}
bool operator > (Time &d1, Time &d2) {
	int d1_sum = d1.hh * 3600 + d1.mm * 60 + d1.ss;
	int d2_sum = d2.hh * 3600 + d2.mm * 60 + d2.ss;
	if(d1_sum>d2_sum)
		return 1;
	else
		return 0;
}
int operator - (Time &t1,Time &t2) {
	int t1_sum = t1.hh * 3600 + t1.mm * 60 + t1.ss;
	int t2_sum = t2.hh * 3600 + t2.mm * 60 + t2.ss;
	return t1_sum - t2_sum;
}
class Date {
		int year, month, day;
	public:
		Date(int y = 0, int m = 0, int d = 0) : year(y),month(m),day(d) {}
		void set_date(int y  , int m  , int d  ) {
			year = y;
			month = m;
			day = d;
		}
		friend bool operator>(Date &d1, Date &d2);
		friend ostream & operator<<(ostream &output,Date &d);
};
ostream & operator <<(ostream &output,Date &t) {
	output << t.year << " " << t.month << " " << t.day ;
	return output;
}
bool operator > (Date &d1, Date &d2) {
	int d1_sum = d1.year * 365 + d1.month * 30 + d1.day;
	int d2_sum = d2.year * 365 + d2.month * 30 + d2.day;
	if(d1_sum>d2_sum)
		return 1;
	else
		return 0;
}
int main() {
	int intArray[100];
	double douArray[100];
	Time timeArray[100];
	Date dateArray[100];
	int icount, dcount, tcount, Dcount;
	int flag,i1,i2,i3;
	double d1, d2;
	for (;;) {
		cin >> flag;
		if(flag==-1)
			break;
		else if(flag==1) {
			//int i = 0;
			for (int i = 0;; i++) {
				cin >> flag;
				if(!flag)
					break;
				intArray[i] = flag;
				icount = i;
			}
			maxn(intArray, icount);
		} else if(flag==2) {
			for (int i = 0;; i++) {
				cin >> d1;
				if(!d1)
					break;
				douArray[i] = d1;
				dcount = i;
			}
			maxn(douArray, dcount);
		} else if(flag==3) {
			for (int i = 0;; i++) {
				cin >> i1;
				if(!i1)
					break;
				cin  >>i2 >> i3;
				timeArray[i].set_time(i1, i2, i3);
				tcount = i;
			}
			maxn(timeArray, tcount);
		} else if(flag==4) {
			for (int i = 0;; i++) {
				cin >> i1;
				if(!i1)
					break;
				cin  >>i2 >> i3;
				dateArray[i].set_date(i1, i2, i3);
				Dcount = i;
			}
			maxn(dateArray, Dcount);
		}

	}

}
template <typename T>
T maxn(T a[],int n) {
	int max=0;
	for (int i = 0; i <= n; i++) {
		if(a[i]>a[max]) {
			max = i;
		}
	}
	cout << a[max]<<endl;
	return a[max];
}

猜你喜欢

转载自www.cnblogs.com/pluie/p/12953833.html