zoukankan      html  css  js  c++  java
  • 数据的最大值问题(重载+函数模板)

    题目:

    两个类如下设计:类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];
    }
    
  • 相关阅读:
    a++与++a区别
    powerdesigner 15.1 逆向工程 sqlserver2008 、sqlserver2005 带注释
    Docker部署vue+nginx项目
    Spring Cloud项目部署(四)上传docker镜像
    Spring Cloud项目部署(三)使用maven插件上传docker镜像的相关配置
    centos7 IP设置
    Spring Cloud项目部署(二)docker开启2375端口
    Spring Cloud项目部署(一)docker安装
    高并发网站架构设计(转)
    Element UI 那些坑
  • 原文地址:https://www.cnblogs.com/pluie/p/12953833.html
Copyright © 2011-2022 走看看