PTA 7-7 利用函数模板,求若个类型数中的最大值

要求设计一个函数模板:

template
T Max(T x[],int len)

可以对int、float、Time(时间类)和Date(日期类)或其他基本类型的数据求最大值。 主函数有如下数据成员: int intArray[100]; double douArray[100]; Time timeArray[100]; date dateArray[100]; 【提示】:定义时间类:Time,其含有三个数据成员:hours、minutes、seconds,分别代表时、分和秒,并定义构造函数、输出函数及重载的>(或<)运算符函数等成员函数。 定义日期类:Date,其含有三个数据成员:year、month、day,分别代表年、月、日,定义构造函数、重载的>(或<)运算符函数等成员函数。

输入格式:
每行为一个操作,每行的第一个数字为元素类型,1为整型元素,2为浮点型元素,3为Time类型,4为Date类型。若为整型元素,接着输入整型数据,以0结束。若为浮点型元素,接着输入浮点型数据,以0结束。若为Time型元素, 输入Time型数据:hour1 month1 second1 hour2 month2 second2……,以0结束。若为Date型数据,输入Date型数据:year1 month1 day1 year2 month2 day2 ……,以0结束。输入-1时表示全体输入结束。

输出格式:
对每次输入,输出一个最大值。

输入样例:
在这里给出一组输入。例如:

4 2020 1 1 2012 5 11 2013 4 1 0
4 2020 1 1 2020 3 1 2020 12 1 0
3 18 21 11 23 34 56 2 56 59 0
1 4 5 9 3 7 0
2 2.7 3.2 6.9 4 5 0
1 7 3 9 5 4 0
1 0
2 0
3 0
4 0
-1

输出样例:
在这里给出相应的输出。例如:

2020/1/1
2020/12/1
23:34:56
9
6.9
9
0
0
0:0:0
0/1/1

#include<iostream>
using namespace std;
template<class T>
T Max(T x[], int len) {
	T max=x[0];
	for (int i = 1; i < len; i++) {
		if (max < x[i])
			max = x[i];
		
	}
	return max;
}
class Time {
private:
	int hour;
	int minute;
	int second;
public:
	Time(int h = 0, int m = 0, int s = 0) {
		hour = h;
		minute = m;
		second = s;
	}
	void printTime() {
		cout << hour << ":" << minute << ":" << second << endl;
	}
	bool operator<( Time s2) {
		if (hour < s2.hour) {
			return 1;
		}
		else if (hour > s2.hour) {
			return 0;
		}
		else {
			if (minute < s2.minute) {
				return 1;
			}
			else if (minute > s2.minute) {
				return 0;
			}
			else {
				if (second < s2.second) {
					return 1;
				}
				else {
					return 0;
				}
			}
		}
	}
};
class Date {
private:
	int year;
	int month;
	int day;
public:
	Date(int h = 0, int m = 1, int s = 1) {
		year = h;
		month = m;
		day = s;
	}
	void printDate() {
		cout << year << "/" << month << "/" <<day<< endl;
	}
	bool operator<( Date s2) {
		if (year < s2.year) {
			return 1;
		}
		else if (year > s2.year) {
			return 0;
		}
		else {
			if (month < s2.month) {
				return 1;
			}
			else if (month > s2.month) {
				return 0;
			}
			else {
				if (day < s2.day) {
					return 1;
				}
				else {
					return 0;
				}
			}
		}
	}
	
};

int main() {
	int c = 0;
	int intArray[100];
	double douArray[100];
	Time timeArray[100]; 
	Date dateArray[100];
	while (cin >> c) {
		if (c == -1)
			break;
		else if (c == 1) {
			int len = 0;
			for (int i = 0; i < 100; i++) {
				cin >> intArray[i];
				if (intArray[i] == 0)
					break;
				len++;

			}
			int max = Max(intArray, len);
			cout << max << endl;
		}
		else if (c == 2) {
			int len = 0;
			for (int i = 0; i < 100; i++) {
				cin >> douArray[i];
				if (douArray[i] == 0)
					break;
				len++;

			}
			double max = Max(douArray, len);
			cout << max << endl;
		}
		else if (c == 3) {
			int len = 0,a=0,b=0,c=0;
          
			for (int i = 0; i < 100; i++) {
				cin >> a;
				
				if (a==0)
					break;
				cin >> b >> c;
				Time p(a, b, c);
				timeArray[i] = p;
				len++;

			}
            if(len==0)
               timeArray[0]=Time();
			Time max = Max(timeArray, len);
			max.printTime();
		}
		else if (c == 4) {
			int len = 0, a = 0, b = 0, c = 0;
           
			for (int i = 0; i < 100; i++) {
				cin >> a ;

				if (a == 0 )
					break;
				cin >> b >> c;
				Date p(a, b, c);
				dateArray[i] = p;
				len++;

			}
            if(len==0)
               dateArray[0]=Date();
			Date max = Max(dateArray, len);
			max.printDate();
		}
	}
	return 0;
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值