zoukankan      html  css  js  c++  java
  • 实验2

    Home Web Board ProblemSet Standing Status Statistics
     
    Problem A: 平面上的点——Point类 (I)

    Problem A: 平面上的点——Point类 (I)

    Time Limit: 1 Sec  Memory Limit: 4 MB
    Submit: 6011  Solved: 2151
    [Submit][Status][Web Board]

    Description

    在数学上,平面直角坐标系上的点用X轴和Y轴上的两个坐标值唯一确定。现在我们封装一个“Point类”来实现平面上的点的操作。

    根据“append.cc”,完成Point类的构造方法和show()方法。

    接口描述:
    Point::show()方法:按输出格式输出Point对象。

    Input

    输入多行,每行为一组坐标“x,y”,表示点的x坐标和y坐标,x和y的值都在double数据范围内。

    Output

    输出为多行,每行为一个点,X坐标在前,Y坐标在后,Y坐标前面多输出一个空格。每个坐标的输出精度为最长16位。输出格式见sample。

    C语言的输入输出被禁用。

    Sample Input

    1,2 3,3 2,1

    Sample Output

    Point : (1, 2) Point : (3, 3) Point : (2, 1) Point : (0, 0)

    HINT

    注意精度控制,C语言的输入输出被禁用。

    Append Code

    [Submit][Status][Web Board]
    #include<iostream>
    #include<iomanip>
    using namespace std;
    class Point{
        private:
        double x;
        double y;
        public:
        Point():x(0),y(0){}
        Point(double a,double b):x(a),y(b){}
        void show()
        {
            cout<<setprecision(16)<<"Point : ("<<x<<", "<<y<<")"<<endl;
        }
    };
    int main()
    {
        char c;
        double a, b;
        Point q;
        while(std::cin>>a>>c>>b)
        {
            Point p(a, b);
            p.show();
        }
        q.show();
    }
    Home Web Board ProblemSet Standing Status Statistics
     
    Problem B: 平面上的点——Point类 (II)

    Problem B: 平面上的点——Point类 (II)

    Time Limit: 1 Sec  Memory Limit: 4 MB
    Submit: 5090  Solved: 2072
    [Submit][Status][Web Board]

    Description

    在数学上,平面直角坐标系上的点用X轴和Y轴上的两个坐标值唯一确定。现在我们封装一个“Point类”来实现平面上的点的操作。

    根据“append.cc”,完成Point类的构造方法和show()方法,输出各Point对象的构造和析构次序。

    接口描述:
    Point::show()方法:按输出格式输出Point对象。

    Input

    输入多行,每行为一组坐标“x,y”,表示点的x坐标和y坐标,x和y的值都在double数据范围内。

    Output

    输出每个Point对象的构造和析构行为。对每个Point对象,调用show()方法输出其值:X坐标在前,Y坐标在后,Y坐标前面多输出一个空格。每个坐标的输出精度为最长16位。输出格式见sample。

    C语言的输入输出被禁用。

    Sample Input

    1,2 3,3 2,1

    Sample Output

    Point : (0, 0) is created. Point : (1, 2) is created. Point : (1, 2) Point : (1, 2) is erased. Point : (3, 3) is created. Point : (3, 3) Point : (3, 3) is erased. Point : (2, 1) is created. Point : (2, 1) Point : (2, 1) is erased. Point : (0, 0) is copied. Point : (1, 1) is created. Point : (0, 0) Point : (1, 1) Point : (0, 0) Point : (1, 1) is erased. Point : (0, 0) is erased. Point : (0, 0) is erased.

    HINT

    思考构造函数、拷贝构造函数、析构函数的调用时机。

    Append Code

    [Submit][Status][Web Board]
    #include<iostream>
    #include<iomanip>
    using namespace std;
    class Point{
        private:
        double x,y;
        public:
        Point():x(0),y(0){cout<<setprecision(16)<<"Point : (0, 0) is created."<<endl;}
        Point(double a,double b):x(a),y(b){cout<<setprecision(16)<<"Point : ("<<x<<", "<<y<<") is created."<<endl;}
        Point(double a):x(a),y(1){cout<<setprecision(16)<<"Point : ("<<x<<", "<<y<<") is created."<<endl;}
        Point(const Point &q){x=q.x;y=q.y;cout<<setprecision(16)<<"Point : ("<<x<<", "<<y<<") is copied."<<endl;}
        ~Point(){cout<<setprecision(16)<<"Point : ("<<x<<", "<<y<<") is erased."<<endl;}
        void show(){cout<<setprecision(16)<<"Point : ("<<x<<", "<<y<<")"<<endl;}
    };
    int main()
    {
        char c;
        double a, b;
        Point q;
        while(std::cin>>a>>c>>b)
        {
            Point p(a, b);
            p.show();
        }
        Point q1(q), q2(1);
        q1.show();
        q2.show();
        q.show();
    }
    Home Web Board ProblemSet Standing Status Statistics
     
    Problem C: 平面上的点——Point类 (III)

    Problem C: 平面上的点——Point类 (III)

    Time Limit: 1 Sec  Memory Limit: 4 MB
    Submit: 3328  Solved: 1933
    [Submit][Status][Web Board]

    Description

    在数学上,平面直角坐标系上的点用X轴和Y轴上的两个坐标值唯一确定。现在我们封装一个“Point类”来实现平面上的点的操作。

    根据“append.cc”,完成Point类的构造方法和show()方法,输出各Point对象的构造和析构次序。实现showPoint()函数。

    接口描述:
    showPoint()函数按输出格式输出Point对象,调用Point::show()方法实现。
    Point::show()方法:按输出格式输出Point对象。

    Input

    输入多行,每行为一组坐标“x,y”,表示点的x坐标和y坐标,x和y的值都在double数据范围内。

    Output

    输出每个Point对象的构造和析构行为。showPoint()函数用来输出(通过参数传入的)Point对象的值:X坐标在前,Y坐标在后,Y坐标前面多输出一个空格。每个坐标的输出精度为最长16位。输出格式见sample。

    C语言的输入输出被禁用。

    Sample Input

    1,2 3,3 2,1

    Sample Output

    Point : (0, 0) is created. Point : (1, 2) is created. Point : (1, 2) is copied. Point : (1, 2) Point : (1, 2) is erased. Point : (1, 2) is erased. Point : (3, 3) is created. Point : (3, 3) is copied. Point : (3, 3) Point : (3, 3) is erased. Point : (3, 3) is erased. Point : (2, 1) is created. Point : (2, 1) is copied. Point : (2, 1) Point : (2, 1) is erased. Point : (2, 1) is erased. Point : (0, 0) is copied. Point : (1, 1) is created. Point : (0, 0) is copied. Point : (1, 1) is copied. Point : (0, 0) is copied. Point : (0, 0) Point : (1, 1) Point : (0, 0) Point : (0, 0) is erased. Point : (1, 1) is erased. Point : (0, 0) is erased. Point : (1, 1) is erased. Point : (0, 0) is erased. Point : (0, 0) is erased.

    HINT

    思考构造函数、拷贝构造函数、析构函数的调用时机。

    Append Code

    [Submit][Status][Web Board]
    #include<iostream>
    #include<iomanip>
    using namespace std;
    class Point{
    private:
        double x;
        double y;
    public:
        Point():x(0),y(0){cout<<setprecision(16)<<"Point : (0, 0) is created."<<endl;}
        Point(double a,double b):x(a),y(b){cout<<setprecision(16)<<"Point : ("<<x<<", "<<y<<") is created."<<endl;}
        Point(double a):x(a),y(1){cout<<setprecision(16)<<"Point : ("<<x<<", "<<y<<") is created."<<endl;}
        void show();
        ~Point()
        {
            cout<<setprecision(16)<<"Point : ("<<x<<", "<<y<<") is erased."<<endl;
        }
        Point(const Point &p)
        {
            x=p.x;
            y=p.y;
            cout<<setprecision(16)<<"Point : ("<<p.x<<", "<<p.y<<") is copied."<<endl;
        }
    };
    void Point::show()
    {
           cout<<setprecision(16)<<"Point : ("<<x<<", "<<y<<")"<<endl;
    }
    
    void showPoint(Point a)
        {
             a.show();
        }
    
    void showPoint(Point a,Point b,Point c)
        {
             a.show();
             b.show();
             c.show();
        }
    int main()
    {
        char c;
        double a, b;
        Point q;
        while(std::cin>>a>>c>>b)
        {
            Point p(a, b);
            showPoint(p);
        }
        Point q1(q), q2(1);
        showPoint(q1, q2, q);
    }
    Home Web Board ProblemSet Standing Status Statistics
     
    Problem D: 时间类的构造和输出

    Problem D: 时间类的构造和输出

    Time Limit: 3 Sec  Memory Limit: 128 MB
    Submit: 1964  Solved: 595
    [Submit][Status][Web Board]

    Description

    封装一个时间类Time,用于时间处理的相关功能,支持以下操作:
     
    1. Time::Time(int,int,int)构造方法:传递时分秒的三个参数构造对象。
    2. Time::showTime()方法:输出“hh:mm:ss”,不足两位的要前面补0。
     
    你设计一个时间类Time,使得main()函数能够正确运行。
     
    函数调用格式见append.cc。
     
    append.cc中已给出main()函数。
     

    Input

    输入的第一个整数n,表示有n组测试数据,每组3个整数:hh,mm,ss,分别表示时、分、秒,其值都在合法的时间范围内。
     

    Output

    每组测试数据对应一组输出“hh:mm:ss”,不足两位的输出需要前面补0,格式见sample。
     

    Sample Input

    5 0 0 1 0 59 59 1 1 1 23 0 0 23 59 59

    Sample Output

    00:00:01 00:59:59 01:01:01 23:00:00 23:59:59

    HINT

    输出格式用头文件<iomanip>中流操作算子:
    setw(w)   :设置数据的输出宽度为w个字符
    setfill(c):设置用字符c作为填充字符

    Append Code

    [Submit][Status][Web Board]
    #include<iostream>
    #include<iomanip>
    using namespace std;
    class Time{
       private:
           int hour;
           int minute;
           int second;
       public:
         Time(int,int,int);
         void showTime();
    };
     Time::Time(int h,int m,int s):hour(h),minute(m),second(s){}
    void Time::showTime()
    {
        cout<<setfill('0')<<setw(2)<<hour<<":"<<setfill('0')<<setw(2)<<setfill('0')<<setw(2)<<minute<<":"<<setfill('0')<<setw(2)<<second<<endl;
    }
    
    int main()
    {
        int cases;
        cin>>cases;
        for(int i = 1; i <= cases; ++i)
        {
            int hour, minute, second;
            cin>>hour>>minute>>second;
            Time t(hour, minute, second);
            t.showTime();
        }
    }
    Home Web Board ProblemSet Standing Status Statistics
     
    Problem E: 时间类的成员读写

    Problem E: 时间类的成员读写

    Time Limit: 3 Sec  Memory Limit: 128 MB
    Submit: 1785  Solved: 582
    [Submit][Status][Web Board]

    Description

    封装一个时间类Time,用于时间处理的相关功能,支持以下操作:
     
    1. Time::Time()无参构造方法。
    2. 成员读函数:
       Time::hour()  :返回Time的小时数;
       Time::minute():返回Time的分钟数;
       Time::second():返回Time的秒数。
    3. 成员写函数:
       Time::hour(int)  :传参修改Time的小时数;
       Time::minute(int):传参修改Time的分钟数;
       Time::second(int):传参修改Time的秒数。
     
    你设计一个时间类Time,使得main()函数能够正确运行。
     
    函数调用格式见append.cc。
     
    append.cc中已给出main()函数。
     

    Input

    输入的第一个整数n,表示有n组测试数据,每组3个整数:hh,mm,ss,分别表示时、分、秒,其值都在合法的时间范围内。
     

    Output

    每组测试数据对应一组输出“hh:mm:ss”,不足两位的输出需要前面补0,格式见sample。
     

    Sample Input

    5 0 0 1 0 59 59 1 1 1 23 0 0 23 59 59

    Sample Output

    00:00:01 00:59:59 01:01:01 23:00:00 23:59:59

    HINT

    输出格式用头文件<iomanip>中流操作算子:
    setw(w)   :设置数据的输出宽度为w个字符
    setfill(c):设置用字符c作为填充字符

    Append Code

    [Submit][Status][Web Board]
    #include<bits/stdc++.h>
    using namespace std;
    class Time{
        int h,m,s;
    public:
        Time(int a=0,int b=0,int c=0):h(a),m(b),s(c){}
        void showTime(){printf("%.2d:%.2d:%.2d
    ",h,m,s);}
        int hour(int a=-1){if(~a)h=a;return h;}
        int minute(int a=-1){if(~a)m=a;return m;}
        int second(int a=-1){if(~a)s=a;return s;}
    };
    
    int main()
    {
        Time t;
        int cases;
        cin>>cases;
        for(int i = 1; i <= cases; ++i)
        {
            int hour, minute, second;
            cin>>hour>>minute>>second;
            t.hour(hour);
            t.minute(minute);
            t.second(second);
            cout<<setw(2)<<setfill('0')<<t.hour()<<":";
            cout<<setw(2)<<setfill('0')<<t.minute()<<":";
            cout<<setw(2)<<setfill('0')<<t.second()<<endl;
        }
    }
    Home Web Board ProblemSet Standing Status Statistics
     
    Problem F: 一元二次方程类

    Problem F: 一元二次方程类

    Time Limit: 1 Sec  Memory Limit: 128 MB
    Submit: 651  Solved: 232
    [Submit][Status][Web Board]

    Description

    定义一个表示一元二次方程的类Equation,该类至少具有以下3个数据成员:a、b和c,用于表示方程“a*x*x + b*x +c = 0”。同时,该类还至少具有以下两个成员函数:

    1. void solve():用于求方程的根。

    2. void printRoot():用于输出方程的根。

    设定:

    1. 所有输入的a、b、c所生成的方程必定有个2个不同的实根。

    2. 输出的两个根按照从大到小的顺序输出,两个根之间用一个空格隔开,而且每个根必须且仅能保留2位小数,即使小数部分为0。

    3. 请根据样例和给出的main()函数定义相应的构造函数。

    Input

    输入有若干行,每行有3个实数,分别为方程“a*x*x + b*x + c = 0”中的系数a、b、c。

    Output

    按照题目要求中的设定条件2输出方程的根。

    Sample Input

    1 3 2

    Sample Output

    -1.00 -2.00

    HINT

    可以使用fixed和setprecision()来实现输出固定小数位数的数值。

    Append Code

    [Submit][Status][Web Board]
    #include<iostream>
    #include<iomanip>
    #include<cmath>
    using namespace std;
    class Equation{
    private:
        double a;
        double b;
        double c;
        double s1;
        double s2;
    public:
        Equation(double x,double y,double z):a(x),b(y),c(z){}
        void solve()
        {
            s1=(-b+sqrt(b*b-4*a*c))/(2*a);
            s2=(-b-sqrt(b*b-4*a*c))/(2*a);
        }
        void printRoot()
        {
    
            cout <<setiosflags(ios::fixed);
            cout<<setprecision(2)<<max(s1,s2)<<" "<<min(s1,s2)<<endl;
        }
    };
    int main()
    {
        double a, b, c;
        while (cin>>a>>b>>c)
        {
            Equation equ(a,b,c);
            equ.solve();
            equ.printRoot();
        }
        return 0;
    }
    Home Web Board ProblemSet Standing Status Statistics
     
    Problem G: 整数的封装

    Problem G: 整数的封装

    Time Limit: 1 Sec  Memory Limit: 128 MB
    Submit: 787  Solved: 209
    [Submit][Status][Web Board]

    Description

    现在,请编写一个Integer类,将整数封装起来。目前,只需要你来实现最基本的功能:

    1. 具有2个构造函数:

    (1)Integer::Integer(int):根据参数构建一个整数对象。

    (2)Integer::Integer(char*, int):根据给定的字符串和进制来构建一个整数对象。

    2. 具有一个int Integer::getValue()方法,用于返回Integer类中所封装的整数的具体数值。

    Input

    输入分为多行。

    第一行是一个正整数M,表示其后面的M行为M个整数,每行一个整数。

    第M+2行是一个正整数N,表示其后有N行。每行由利用一个空格隔开的2部分组成:前半部分是一个字符串,后半部分是该字符串所使用的进制。

    注意:

    1. 所有的输入,均在int类型的表示范围内,且所有的输入均为合法输入。

    2. 利用0~9和a~z可最大可以表示36进制的数值。

    Output

    输出为M+N行,每行为一个十进制整数,且输出顺序应与输入顺序相同。

    Sample Input

    2 999 -1999 4 0111 2 1a 16 z 36 a 16

    Sample Output

    999 -1999 7 26 35 10

    HINT

     

    Append Code

    [Submit][Status][Web Board]
    #include<iostream>
    #include<cstring>
    #include<iomanip>
    using namespace std;
    class Integer{
    private:
        int val;
    public:
        Integer(int n):val(n){}
        Integer(char*, int);
        int getValue()
        {
            return val;
        }
    };
    
    Integer::Integer(char* c, int t)
        {
            int length=strlen(c);
            val=0;
            int a;
            char ch[101];
            strcpy(ch,c);
            if(ch[0]=='-')
            {
                for(a=1;a<length;a++)
            {
                int num;
                char tmp=ch[a];
                if(tmp>='0'&&tmp<='9')
                {
                    num=tmp-'0';
                    val=val*t+num;
                }
                else if(tmp>='a'&&tmp<='z')
                {
                    num=tmp-'a'+10;
                    val=val*t+num;
                }
                else if(tmp>='A'&&tmp<='Z')
                {
                    num=tmp-'A'+10;
                    val=val*t+num;
                }
            }
            val=0-val;
            }
            else
            {
                for(a=0;a<length;a++)
            {
                int num;
                char tmp=ch[a];
                if(tmp>='0'&&tmp<='9')
                {
                    num=tmp-'0';
                    val=val*t+num;
                }
                else if(tmp>='a'&&tmp<='z')
                {
                    num=tmp-'a'+10;
                    val=val*t+num;
                }
                else if(tmp>='A'&&tmp<='Z')
                {
                    num=tmp-'A'+10;
                    val=val*t+num;
                }
            }
            }
        }
    int main()
    {
        char str[100];
        int numOfData, numOfStr;
        int data, i, radix;
        
        cin>>numOfData;
        for (i = 0; i < numOfData; i++){
            cin>>data;
            Integer anInteger(data);
            cout<<anInteger.getValue()<<endl;
        }
    
        cin>>numOfStr;
        for (i = 0; i < numOfStr; i++){
            cin>>str>>radix;
            Integer anInteger(str,radix);
            cout<<anInteger.getValue()<<endl;
        }
        return 0;
    }
  • 相关阅读:
    51nod 1127 最短的包含字符串
    hdu 2197 本原串
    hdu 2160 母猪的故事
    hdu 2594 Simpsons’ Hidden Talents
    自旋锁原理及java自旋锁
    Java中CAS详解
    dump相关
    多线程设置线程超时思路
    kafka遗忘点
    Java 和 HTTP 的那些事(四) HTTPS 和 证书(转)
  • 原文地址:https://www.cnblogs.com/auto1945837845/p/5513584.html
Copyright © 2011-2022 走看看