HW 10

Problem A: 可变长数组

main函数:

int main()
{
    int cases, num, iData;
    double dData;
    DataVector<int> iVector;
    DataVector<double> dVector;
    char type;
    cin>>cases;
    for (int i = 0; i < cases; i++)
    {
        cin>>type;
        switch(type)
        {
        case 'i':
            iVector.clearVector();
            cin>>num;
            for (int j = 0; j < num; j++)
            {
                cin>>iData;
                iVector.getVector().push_back(iData);
            }
            iVector.show();
            cout<<iVector.getSum()<<endl;
            break;
        case 'd':
            dVector.clearVector();
            cin>>num;
            for (int j = 0; j < num; j++)
            {
                cin>>dData;
                dVector.getVector().push_back(dData);
            }
            dVector.show();
            cout<<setprecision(2)<<fixed<<dVector.getSum()<<endl;
        }
    }
    return 0;
}

考点:类模板 vector

AC代码:

#include <bits/stdc++.h>
using namespace std;
template <class T>
class DataVector
{
    vector<T>members;
public:
    void show()
    {
        int len  = members.size();
        for(int i = 0;i<len;i++)
        {
            cout << members[i] << (i==len-1?'\n':' ');
        }
    }
    T getSum()
    {
        double d = 0;
        int len =members.size();
        for(int i = 0;i<len;i++)
            d+=members[i];
        return d;
    }
    void clearVector()
    {
        members.clear();
    }
    vector<T>&getVector()
    {
        return members;
    }
};

Problem B: 求平均年龄

main函数:

int main()
{
    int cases, age;
    string name;
    Persons persons;
    cin>>cases;
    for (int i = 0; i < cases; i++)
    {
        cin>>name>>age;
        persons.addAPerson(name, age);
    }
    cout<<setprecision(2)<<fixed<<persons.getAveAge()<<endl;
}

考点:静态数据成员

#include <bits/stdc++.h>
using namespace std;
class Persons
{
    string name;
    int age;
    static int m, n;
public:
    Persons(){}
    //Person(string _s,int _age):name(_s),age(_age){}
    void addAPerson(string s,int a)
    {
        m++;
        name =s;
        age =a;
        n+=a;
    }
    static double getAveAge()
    {
        return (double)n/m;
    }
};
int Persons::m = 0;
int Persons::n = 0;

Problem C: 合唱比赛开始了!

main函数:

int main()
{
    Contest contest;
    contest.Input();
    contest.Compute();
    contest.Sort();
    contest.Show();
    return 0;
}

考点:输入输出处理,sort函数(类内重载用sort的话要在最后加const)

(主函数好评,然而CE到RE😭)

AC代码:

#include <bits/stdc++.h>
using namespace std;
 
struct Team
{
    string name;
    //vector<double> v;
    double score;
};
bool cmp(const Team &a,const Team &b)
{
    return a.score>b.score;
}
class Contest
{
    int m,n,p;
    vector<Team> t;
public:
    void Input()
    {
        cin >> m >> n >> p;
        Team o;
        for(int i = 0;i<m;i++)
            t.push_back(o);
        for(int k = 0; k<m; k++)
        {
            cin >> t[k].name;
            double v[1000];
            for(int i = 0; i<n; i++)
            {
                double c = 0;
                for(int j = 0; j<p; j++)
                {
                    int b;
                    cin >> b;
                    c+=b;
                }
                v[i] = c/p;
            }
            sort(v,v+n);
            double c = 0;
            for(int j = 1; j<n-1; j++)
                c+=v[j];
            t[k].score = c/(n-2);
        }
    }
    void  Compute()
    {
    }
    void Sort()
    {
        sort(t.begin(),t.end(),cmp);
    }
    void Show()
    {
        for(int i = 0; i<m; i++)
        {
            cout << left << setw(11) <<  t[i].name  << setprecision(2) << fixed << t[i].score << endl;
        }
    }
};

Problem D: 字符构成的图形

main函数:

int main()
{
    int cases, n;
    char c;
    cin>>cases;
    for (int i = 0; i < cases; i++)
    {
        cin>>n>>c;
        CharGraph cGraph(n, c);
        cGraph.print();
    }
    return 0;
}

考点:类的使用

AC代码:

#include <bits/stdc++.h>
using namespace std;
class CharGraph
{
    int step;
    char c;
public:
    CharGraph(int _step,char _c):step(_step),c(_c){}
    void print()
    {
       // cout << step << endl;
        if(step == 0)
            printf("\n");
        else if(step>0)
        {
            for(int i = 1;i<=step;i++)
            {
                for(int j = 1;j<=i;j++)
                    printf("%c",c);
                printf("\n");
            }
        }
        else
        {
            step  = abs(step);
            for(int i = 1;i<=step;i++)
            {
                for(int j = step;j>=i;j--)
                    printf("%c",c);
                printf("\n");
            }
        }
    }
};

Problem E: 分数类的模板数组类

main函数:

int main()
{
    int  n;
    cin >> n;
    Array<double> db(1000);
    db.input(n);
    double dbsum(0.0);
    for(int i = 0; i < n; i++)
        dbsum += db[i];
    cout << dbsum << endl;
 
    cin >> n;
    Array<Fract> fr(1000);
    fr.input(n);
    Fract frsum(0, 1);
    for(int i = 0; i < n; i++)
        frsum += fr[i];
    frsum.show();
}

考点:输入输出重载,分数类的处理。

AC代码:

#include <bits/stdc++.h>
using namespace std;
template <class T>
class Array
{
    int n;
    vector<T> v;
public:
    Array(int _n)
    {
        n = _n,v = vector<T>(n);
    }
    void input(int m)
    {
        int len = m<n?m:n;
        for(int i = 0; i<len; i++)
            cin >> v[i];
        int d;
        for(int i = len; i<m; i++)
            cin >> d;
    }
    T operator [](int x)
    {
        return v[x];
    }
};
class Fract
{
    int a,b;
    bool flag;
public:
    Fract(){}
    Fract(int _a,int _b)
    {
        if(_a*_b>0)
            flag = true;
        else
            flag = false;
        a = abs(_a);
        b = abs(_b);
        int d  = __gcd(a,b);
        a/=d,b/=d;
    }
    void show()
    {
        if(a==0)
            cout << 0 << endl;
        else
        {
            if(!flag)
            cout << "-";
            if(b==1)
                cout << a << endl;
            else
            {
                cout << a << "/" << b << endl;
            }
        }
    }
    Fract& operator +=(const Fract &f)
    {
        int d  = b*f.b/__gcd(b,f.b);
        int d1 = d/b;
        int d2 = d/f.b;
        a*=d1;
        int b1 = f.b,a1 = f.a;
        a1=a1*d2;
        b = d;
        if(!flag)
            a=-a;
        if(!f.flag)
            a1=-a1;
        a+=a1;
        *this = Fract(a,b);
        return *this;
    }
    friend istream& operator >>(istream &is,Fract &f)
    {
        int a ,b;
        is >> a >> b;
        f = Fract(a,b);
        return is;
    }
};

Problem F: 开个餐馆算算账

考点:map,sort的使用,要注意排序时要用字典序(WA6次)

AC代码:

#include <bits/stdc++.h>
using namespace std;
struct customer
{
    string name;
    double cost;
    int len;
public:
    customer(){};
    customer(string _name,double _cost):name(_name),cost(_cost){len =name.size();}
 
}d[10000];
bool cmp(const customer &a,const customer &b)
{
    return a.name<b.name;
}

 

posted @ 2019-06-11 13:07  浅花迷人  阅读(218)  评论(0编辑  收藏  举报