zoukankan      html  css  js  c++  java
  • 计算机考研复试真题 复数集合

    题目描述

        一个复数(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;
    }
  • 相关阅读:
    OSX安装nginx和rtmp模块(rtmp直播服务器搭建)
    用runtime来重写Coder和deCode方法 归档解档的时候使用
    Homebrew安装卸载
    Cannot create a new pixel buffer adaptor with an asset writer input that has already started writing'
    OSX下面用ffmpeg抓取桌面以及摄像头推流进行直播
    让nginx支持HLS
    iOS 字典转json字符串
    iOS 七牛多张图片上传
    iOS9UICollectionView自定义布局modifying attributes returned by UICollectionViewFlowLayout without copying them
    Xcode6 iOS7模拟器和Xcode7 iOS8模拟器离线下载
  • 原文地址:https://www.cnblogs.com/parzulpan/p/9923105.html
Copyright © 2011-2022 走看看