集合的前N个元素:编一个程序,按递增次序生成集合M的最小的N个数,M的定义如下:
    (1)数1属于M;
    (2)如果X属于M,则Y=2*x+1和Z=3*x+1也属于M;
    (3)此外再没有别的数属于M。
【分析】
       可以用两个队列a和b来存放新产生的数,然后通过比较大小决定是否输出,具体方法如下:
       (1)令fa和fb分别为队列a和队列b的头指针,它们的尾指针分别为ra和rb。初始时,X=1,fa=fb=ra=rb=1;                              
      (2)将2*x+1和3*x+1分别放入队列a和队列b的队尾,尾指针加1。                  即:a[r]←2*x+1,b[r]←3*x+1,r←r+1;
      (3)将队列a和队列b的头结点进行比较,可能有三种情况:
        (A)a[ha]>b[hb]      (B)a[ha]=b[hb]         (C)a[ha]<b[hb]
      将比较的小者取出送入X,取出数的队列的头指针相应加1。
      (4)重复(2),(3)直至取出第N项为止。
 
非stl
 #include<iostream>
using namespace std;
int a[];
int b[];
int ha=,ta;
int hb=,tb;
int n;
int tot=;
int x=;
int main()
{
int n;
cin>>n;
while(tot<=n)
{
cout<<x<<" ";
ta++;
tb++;
a[ta]=*x+;
b[tb]=*x+;
if(a[ha]>b[hb])
{
x=b[hb];
hb++;
}
else if(a[ha]<b[hb])
{
x=a[ha];
ha++;
}
else
{
x=a[ha];
ha++;
hb++;
}
tot++;
}
//cout<<tot;
return ;
}

stl:

 #include<iostream>
#include<queue>
using namespace std;
int tot=;
int x=;
int main()
{
queue<int>a;
queue<int>b;
int n;
cin>>n;
while(tot<=n)
{
cout<<x<<" ";
a.push(*x+);
b.push(*x+);
if(a.front()>b.front())
{
x=b.front();
b.pop();
}
else if(a.front()<b.front())
{
x=a.front();
a.pop();
}
else
{
x=a.front();
a.pop();
b.pop();
}
tot++;
}
return ;
}

集合的前N个元素的更多相关文章

  1. Set集合对象比较两个元素的方法

    Set集合对象比较两个元素的方法并不是根据“equals()”方法的返回值来比较.而是用“hashCode()”方法来进行判断.只要两个元素的“hashCode()”方法的返回值相同,就认为两个元素相 ...

  2. Java基础知识强化之集合框架笔记27:ArrayList集合练习之去除ArrayList集合中的重复字符串元素

    1. 去除ArrayList集合中的重复字符串元素(字符串内容相同) 分析: (1)创建集合对象 (2)添加多个字符串元素(包含重复的) (3)创建新的集合 (4)遍历旧集合,获取得到每一个元素 (5 ...

  3. 你能选择出,前几个元素吗?使用纯css

    面试被问到 ,你能选择出前几个元素吗?括弧只能使用css 我当时是一脸懵逼... 回去的路上思考一路 终于想到了解决办法 虽然为时已晚 但是觉得很有意义... 首先要用到 否定选择器 : :not() ...

  4. 获取2个集合List<T>的共同元素

    获取2个集合List<T>的共同元素,循环2个集合,然后比对. class Bj { public void GetIntersect() { , , , , , , }; , , , , ...

  5. linq 根据指定条件返回集合中不重复的元素

    原理:先查询出数据,根据指定值分组,然后取第一条映射 1.第一种方法 string sql = string.Format("select*from PoliceLogistcs); db. ...

  6. lodash 提取前N个元素 take

    _.take(array, [n=1]) 从数组的起始元素开始提取 N 个元素. <!DOCTYPE html> <html lang="zh"> < ...

  7. 算法导论学习之线性时间求第k小元素+堆思想求前k大元素

    对于曾经,假设要我求第k小元素.或者是求前k大元素,我可能会将元素先排序,然后就直接求出来了,可是如今有了更好的思路. 一.线性时间内求第k小元素 这个算法又是一个基于分治思想的算法. 其详细的分治思 ...

  8. parents([expr]) 取得一个包含着所有匹配元素的祖先元素的元素集合(不包含根元素)。可以通过一个可选的表达式进行筛选。

    parents([expr]) 概述 取得一个包含着所有匹配元素的祖先元素的元素集合(不包含根元素).可以通过一个可选的表达式进行筛选.大理石平台检定规程   参数 exprStringV1.0 用于 ...

  9. 求一个集合S中m个元素的所有排列以及一个数组A的全排列—递归实现版完整代码

    说明,本文全文代码均用dart语言实现. 求一个集合S中m个元素的所有排列情况,并打印,非常适合用递归的思路实现.本文给出了两种实现方法,一种是给定的填充排列数组长度是固定的,一种是可变长度的.两种方 ...

随机推荐

  1. 降维之主成分分析法(PCA)

    一.主成分分析法的思想 我们在研究某些问题时,需要处理带有很多变量的数据,比如研究房价的影响因素,需要考虑的变量有物价水平.土地价格.利率.就业率.城市化率等.变量和数据很多,但是可能存在噪音和冗余, ...

  2. IPython&Jupyter私房手册

    Jupyter是以Ipython为基础,可以极大的方便开发,对于如何使用,网上的资料都不太全.因此决定自己编写一个私房手册方便随时查找. 1. 安装和配置 安装不多说,不想折腾直接安装anaconda ...

  3. redis主从 && 伪群集

    redis主从非常简单,仅需要要从上的配置文件里指定主的IP和端口就可以了.如果主上有密码,则再添加主的密码即可!! slaveof 192.168.15.230 6379 # 添加主上的IP和端口, ...

  4. Qt 学习之路 2(46):视图和委托

    Home / Qt 学习之路 2 / Qt 学习之路 2(46):视图和委托 Qt 学习之路 2(46):视图和委托  豆子  2013年3月11日  Qt 学习之路 2  63条评论 前面我们介绍了 ...

  5. Eclipse工程部署到Tomcat时出现中文乱码问题

    1.修改Server.xml文件:添加URIEncoding="UTF-8" <?xml version="1.0" encoding="UTF ...

  6. composer 创建自己包

    服务器环境下创建自己的项目文件 初始化composer 打开cmd 窗口,cd 到 backrestore 执行 composer init 命令 D:\phpStudy\WWW\backrestor ...

  7. CentOS7 编译安装 php7

    更新:2019-01-25 补充:CentOS 7.5 全新编译安装 PHP-7.3.1 ,补充内容接在原文之后 更新:2018-09-29 补充:新系统下编译安装PHP-7.2.5遇到的问题,补充内 ...

  8. HDU - 4825 01字典树套路题

    /*H E A D*/ struct Trie{ int son[maxn<<2][2]; int b[67],tot; void init(){ // memset(son,0,size ...

  9. vbs SendKeys技术 vbs SendKeys

    简单说,这个命令就是模拟键盘操作,将一个或多个按键指令发送到指定Windows窗口来控制应用程序运行,其使用格式为:object.SendKeys string"object":表 ...

  10. 3.Exadata 软件体系结构

    整体架构和 smart scan Aasm Ehcc (混合例压缩 和 存储索引) SCAN Service 和 server pool DB SERVER -> DB instance -&g ...