• Problem E: 数量的类模板


    Problem E: 数量的类模板

    Time Limit: 1 Sec  Memory Limit: 128 MB
    Submit: 2066  Solved: 1449
    [Submit][Status][Web Board]

    Description

    定义一个类模板Data,用于包装C++中的基本数据类型int和double。它包括:

    1. 数据成员value为该对象所包装的值。

    2. 无参构造函数(初始化value为0)和带参构造函数。

    3. 重载的运算符:>、<、+以及<<。其中"+"返回和,不改变两个操作数的值。

    4. 成员函数setValue用于设置value的值。

    定义另一个类模板GetResult,它只有3个静态成员函数(以下“T"为类型参数):

    1. static Data<T> getSum(Data<T> *arr, int num):求存储在arr中的num个Data对象的和,并返回由这个和构成的一个Data对象。

    2. static Data<T> getMax(Data<T> *arr, int num):求存储在arr中的num个Data对象的最大值,并返回这个最大值对应的对象。

    3.  static Data<T> getMin(Data<T> *arr, int num):求存储在arr中的num个Data对象的最小值,并返回这个最小值对应的对象。

    Input

    输入分多行。

    第一行M>0表示有M个测试用例。

    只有的M行,每行开始有一个字母i或d,第二个是正整数N>0。如果第一个字母是i,则表示本行包括N个int类型的数据;如果第一个字母为d,则表示本行有N个double类型的数据。

    Output

    除前6行输出外,其他输出的行数等于M。其中每一行输出3个数据:对应测试用例的最大值、最小值以及和。实数输出定点小数,且只输出2位小数。

    Sample Input

    3
    i 3 1 2 3
    d 3 1.1 2.2 3.3
    i 1 10
    

      

    Sample Output

    a + b = 30
    max(a, b) = 20
    min(a, b) = 10
    c + d = -0.96
    max(c, d) = 3.14
    min(c, d) = -4.10
    3 1 6
    3.30 1.10 6.60
    10 10 10
    

      

    HINT

     

    Append Code

    append.cc
    int main()
    {
        Data<int> iData[1001];
        Data<double> dData[1001];
        int cases, num;
        char ch;
        int u;
        double v;
        Data<int> a(10), b(20);
        Data<double> c(3.14), d(-4.1);
        cout<<"a + b = "<<(a + b)<<endl;
        cout<<"max(a, b) = "<<(a > b ? a : b)<<endl;
        cout<<"min(a, b) = "<<(a < b ? a : b)<<endl;
        cout<<"c + d = "<<(c + d)<<endl;
        cout<<"max(c, d) = "<<(c > d ? c : d)<<endl;
        cout<<"min(c, d) = "<<(c < d ? c : d)<<endl;
        cin>>cases;
        for (int i = 0; i < cases; i++)
        {
            cin>>ch;
            cin>>num;
            for (int j = 0; j < num; j++)
            {
                if (ch == 'i')
                {
                    cin>>u;
                    iData[j].setValue(u);
                }
                else if (ch == 'd')
                {
                    cin>>v;
                    dData[j].setValue(v);
                }
            }
            if (ch == 'i')
            {
                cout<<GetResult<int>::getMax(iData, num);
                cout<<" "<<GetResult<int>::getMin(iData, num);
                cout<<" "<<GetResult<int>::getSum(iData, num)<<endl;
            }
            else if (ch == 'd')
            {
                cout<<GetResult<double>::getMax(dData, num);
                cout<<" "<<GetResult<double>::getMin(dData, num);
                cout<<" "<<GetResult<double>::getSum(dData, num)<<endl;
            }
        }
        return 0;
    }
    

      

    #include <iostream>
    #include <algorithm>
    #include <iomanip>
    
    using namespace std;
    template <typename T>
    
    class Data
    {
    public :
        T value;
        Data(){value=(T)0;}
        Data(T x){value=x;}
        bool operator>(const Data &p)
        {
            if(value>p.value)
                return true;
            else
                return false;
        }
        bool operator<(const Data &p)
        {
            if(value<p.value)
                return true;
            else
                return false;
        }
        Data operator+(const Data &p)
        {
            Data temp;
            temp.value=value + p.value;
            return temp;
        }
        friend ostream &operator<<(ostream &os,const Data &p)
        {
            os<<fixed<<setprecision(2)<<p.value;
            return os;
        }
        void setValue(T t)
        {
            value=t;
        }
    
    };
    template<typename T>
    class GetResult
    {
    public :
        static Data<T> getSum(Data<T> *arr, int num)
        {
            Data<T> temp;
            for(int i=0; i<num; i++)
                temp=temp+arr[i];
                return temp;
    
        }
        static Data<T> getMax(Data<T> *arr, int num)
        {
            Data<T> temp;
            temp.value=arr[0].value;
            for(int i=0; i<num; i++)
                if(arr[i]>temp)
                temp.value=arr[i].value;
            return temp;
        }
        static Data<T> getMin(Data<T> *arr, int num)
        {
            Data<T> temp;
            temp.value=arr[0].value;
            for(int i=1; i<num; i++)
                if(temp>arr[i])
                temp.value=arr[i].value;
            return temp;
        }
    };
    int main()
    {
        Data<int> iData[1001];
        Data<double> dData[1001];
        int cases, num;
        char ch;
        int u;
        double v;
        Data<int> a(10), b(20);
        Data<double> c(3.14), d(-4.1);
        cout<<"a + b = "<<(a + b)<<endl;
        cout<<"max(a, b) = "<<(a > b ? a : b)<<endl;
        cout<<"min(a, b) = "<<(a < b ? a : b)<<endl;
        cout<<"c + d = "<<(c + d)<<endl;
        cout<<"max(c, d) = "<<(c > d ? c : d)<<endl;
        cout<<"min(c, d) = "<<(c < d ? c : d)<<endl;
        cin>>cases;
        for (int i = 0; i < cases; i++)
        {
            cin>>ch;
            cin>>num;
            for (int j = 0; j < num; j++)
            {
                if (ch == 'i')
                {
                    cin>>u;
                    iData[j].setValue(u);
                }
                else if (ch == 'd')
                {
                    cin>>v;
                    dData[j].setValue(v);
                }
            }
            if (ch == 'i')
            {
                cout<<GetResult<int>::getMax(iData, num);
                cout<<" "<<GetResult<int>::getMin(iData, num);
                cout<<" "<<GetResult<int>::getSum(iData, num)<<endl;
            }
            else if (ch == 'd')
            {
                cout<<GetResult<double>::getMax(dData, num);
                cout<<" "<<GetResult<double>::getMin(dData, num);
                cout<<" "<<GetResult<double>::getSum(dData, num)<<endl;
            }
        }
        return 0;
    }
    

      

    #include <iostream>
    #include <iomanip>
    using namespace std;
    template<typename T>
    class Data
    {
    public :
        T value;
        Data(){value=(T)0;}
        Data(T temp){value=temp;}
        void setValue(T temp)
        {
            value=temp;
        }
        bool operator>(const Data &p)
        {
           return value>p.value;
        }
        bool operator<(const Data &p)
        {
           return value<p.value;
        }
        Data operator+(const Data &p)// 不能返回引用, 输出的是 a+b,没有再赋值给其他对象
        {
            Data temp;
            temp.value=value+p.value;
            return temp;
        }
        friend ostream &operator << (ostream &os, const Data &p)
        {
            os<<setprecision(2)<<fixed<<p.value;
            return os;
        }
    };
    template <typename T>
    class GetResult
    {
    public :
        //各种比较运算符已经重载可以使用
        static Data<T> getSum(Data<T> *arr, int num)
        {
            Data<T> temp;
            for(int i=0; i<num; i++)
                temp=temp+arr[i];//注意:重载了 “+” 并没有重载“+=”
            return temp;
        }
        static Data<T> getMax(Data<T> *arr, int num)
        {
            Data<T> temp;
            temp.value=arr[0].value;
            for(int i=0; i<num; i++)
                if(arr[i]>temp)
            {
                temp.value=arr[i].value;
            }
            return temp;
        }
        static Data<T> getMin(Data<T> *arr, int num)
        {
            Data<T> temp;
            temp.value=arr[0].value;
            for(int i=0; i<num; i++)
            {
                if(temp>arr[i])
                {
                    temp.value=arr[i].value;
                }
            }
            return temp;
        }
    };
    int main()
    {
        Data<int> iData[1001];
        Data<double> dData[1001];
        int cases, num;
        char ch;
        int u;
        double v;
        Data<int> a(10), b(20);
        Data<double> c(3.14), d(-4.1);
        cout<<"a + b = "<<(a + b)<<endl;
        cout<<"max(a, b) = "<<(a > b ? a : b)<<endl;
        cout<<"min(a, b) = "<<(a < b ? a : b)<<endl;
        cout<<"c + d = "<<(c + d)<<endl;
        cout<<"max(c, d) = "<<(c > d ? c : d)<<endl;
        cout<<"min(c, d) = "<<(c < d ? c : d)<<endl;
        cin>>cases;
        for (int i = 0; i < cases; i++)
        {
            cin>>ch;
            cin>>num;
            for (int j = 0; j < num; j++)
            {
                if (ch == 'i')
                {
                    cin>>u;
                    iData[j].setValue(u);
                }
                else if (ch == 'd')
                {
                    cin>>v;
                    dData[j].setValue(v);
                }
            }
            if (ch == 'i')
            {
                cout<<GetResult<int>::getMax(iData, num);
                cout<<" "<<GetResult<int>::getMin(iData, num);
                cout<<" "<<GetResult<int>::getSum(iData, num)<<endl;
            }
            else if (ch == 'd')
            {
                cout<<GetResult<double>::getMax(dData, num);
                cout<<" "<<GetResult<double>::getMin(dData, num);
                cout<<" "<<GetResult<double>::getSum(dData, num)<<endl;
            }
        }
        return 0;
    }
    

      

    作者:7oDo

    仅供参考,请勿抄袭。

    Hang Hang Hang !!!

  • 相关阅读:
    正规替换( 图片 A )
    #1289 The 'InnoDB' feature is disabled; you need MySQL built with 'InnoDB' to hav
    appserv PHP环境配置简易套装
    DW格式化代设置
    ie6 清除li浮动
    wbox JS弹出层
    网页设计必备工具 firefox Web Developer插件 CSS工具组教程
    CSS块级元素和行内元素
    dreamweaver代码 格式化
    iphone下Three20库(From Facebook)的设置使用方法
  • 原文地址:https://www.cnblogs.com/Jie-Fei/p/9128696.html
Copyright © 2020-2023  润新知