PTA C++模板练习:利用函数模板,求若个类型数中的最大值

7-5 利用函数模板,求若个类型数中的最大值 (50分)

要求设计一个函数模板:

template<class T>
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 (x[i] > max) {
			max = x[i];
		}
	}
	return max;
}

class Time {
public:
	double hours, minutes, seconds;
	Time() { hours = 0; minutes = 0; seconds = 0; }
	void set(double a, double b, double c) {
		hours = a;
		minutes = b;
		seconds = c;
	}
	void print() {
		cout << hours << ":"<<minutes <<":"<< seconds<<endl;
	}
	bool operator>(Time a) {
		if (hours > a.hours) {
			return 1;
		}
		else if(hours<a.hours){
			return 0;
		}
		else {
			if (minutes > a.minutes) {
				return 1;
			}
			else if (minutes < a.minutes) {
				return 0;
			}
			else {
				if (seconds > a.seconds) {
					return 1;
				}
				else{
					return 0;
				}
			}
		}
	}
};
class Date {
public:
	int year, month, day;
	Date() { year = 0; month = 1; day = 1; }
	void set(int a, int b, int c) {
		year = a;
		month = b;
		day = c;
	}
	void print() {
		cout << year <<"/"<< month <<"/"<< day << endl;
	}
	int operator>(Date a) {
		if (year > a.year) {
			return 1;
		}
		else if (year == a.year) {
			if (month > a.month) {
				return 1;
			}
			else if (month == a.month) {
				if (day > a.day) {
					return 1;
				}
				else
					return 0;
			}
			else if (month < a.month) {
				return 0;
			}
		}
		else if (year < a.year) {
			return 0;
		}
	}
};

int main() {
	int intArray[100];
	double douArray[100];
	Date dateArray[100];
	Time timeArray[100];
	int oper = -30;
	int end;
	while (oper) {
		cin >> oper;
		if (oper == -1) {
			break;
		}
		if (oper == 1) {
			for (int i = 0; i<100; i++) {
				cin >> intArray[i];
				if (intArray[i] == 0) {
					cout<<Max(intArray, i)<<endl;
					break;
				}
			}
		}
		if (oper == 2) {
			for (int i = 0; i<100; i++) {
				cin >> douArray[i];
				if (douArray[i] == 0) {
					cout<<Max(douArray, i)<<endl;
					break;
				}
			}
		}
		if (oper == 3) {
			for (int i = 0; i<100; i++) {
				cin >> timeArray[i].hours;
				if (timeArray[i].hours==0) {
					Max(timeArray, i).print();
					break;
				}
				cin >> timeArray[i].minutes >> timeArray[i].seconds;
			}
		}
		if (oper == 4) {
			for (int i = 0;i<100; i++) {
				cin >> dateArray[i].year;
				if (dateArray[i].year == 0) {
					Max(dateArray, i).print();
					break;
				}
				cin >> dateArray[i].month >> dateArray[i].day;
			}
		}
	}
	return 0;
}

 注意:题目对时间和日期的初始值都做出了限制,初始化时要按照要求设置。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

只犬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值