• 计算机考研复试真题 复数集合


    题目描述

        一个复数(x+iy)集合,两种操作作用在该集合上:     1、Pop 表示读出集合中复数模值最大的那个复数,如集合为空 输出  empty  ,不为空就输出最大的那个复数并且从集合中删除那个复数,再输出集合的大小SIZE;     2 Insert a+ib  指令(a,b表示实部和虚部),将a+ib加入到集合中 ,输出集合的大小SIZE;     最开始要读入一个int n,表示接下来的n行每一行都是一条命令。

    输入描述:

    输入有多组数据。
    每组输入一个n(1<=n<=1000),然后再输入n条指令。

    输出描述:

    根据指令输出结果。
    
    模相等的输出b较小的复数。
    a和b都是非负数。
    示例1

    输入

    3
    Pop
    Insert 1+i2
    Pop
    

    输出

    empty
    SIZE = 1
    1+i2
    SIZE = 0




    /*
    程序设计思路:由于输出的数据为一个复数,故建立一个复数类,且建立一个为该复数类类型的向量。进行Insert操作时,
    将复数压到向量尾部,输出size,并进行按题意的排序。进行Pop操作时,若向量为空,则输出empty,若不为空,
    则输出向量中内容,并弹出向量尾部,输出size。
    出向量尾部
    附:
    1、sort函数可以三个参数也可以两个参数,必须的头文件#include < algorithm>和using namespace std; 
    2、它使用的排序方法是类似于快排的方法,时间复杂度为n*log2(n)
    3、Sort函数有三个参数:(第三个参数可不写)
    (1)第一个是要排序的数组的起始地址。
    (2)第二个是结束的地址(最后一位要排序的地址)
    (3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,
        此时默认的排序方法是从小到大排序。也可以自定义排序规则。
    */
    #include<iostream>
    #include<vector>
    #include<string>
    #include<algorithm>
    using namespace std;
    class complex{  //复数类
     public:
        int real;
        char op;
        int img;
    };
    bool com(complex a,complex b)  //定义比较规则,这个很重要。
    {
        int x=a.real*a.real+a.img*a.img;
        int y=b.real*b.real+b.img*b.img;
        if(x<y)  //用默认的升序排序,最后一个为最大。
            return true;
        else 
        {
            if(x==y)
            if(a.img<b.img)
                return true;  //降序排列
        }
        return false;  //降序排列
    }
    int main()
    {
        vector<complex> vec;
        int N;
        string st;
        char ch;
        while(cin>>N)
        {
            for(int i=0;i<N;i++)
            {
                cin>>st;
                if(st=="Insert")  //Insert操作
                {
                    complex cp;
                    cin>>cp.real>>cp.op>>ch>>cp.img;
                    vec.push_back(cp);
                    cout<<"SIZE = "<<vec.size()<<endl;
                    sort(vec.begin(),vec.end(),com);
                }
                else  //Pop操作
                {
                    if(vec.empty())
                    cout<<"empty"<<endl;
                    else
                    {
                        complex c=vec.back();
                        vec.pop_back();
                        cout<<c.real<<c.op<<"i"<<c.img<<endl;
                        cout<<"SIZE = "<<vec.size()<<endl;
                    }
                }
            }
        }
        return 0;
    }
  • 相关阅读:
    bbs小项目整理(八)(总结、源码分享)
    struts2验证框架
    Struts2文件上传例子
    struts2的参数的封装形式
    struts2的获取Servlet API的几种方式的学习笔记
    struts2的相关配置信息
    java向mysql插入时间,时间日期格式化
    关于将项目导入eclipse出现小红叉的解决笔记
    bbs小项目整理(七)(消息分页展现)
    HTML引用CSS
  • 原文地址:https://www.cnblogs.com/parzulpan/p/9923105.html
Copyright © 2020-2023  润新知