7.7 有些数的素因子只有3、5、7,请设计一个算法,找出其中第k个数。

解法:

首先,我们可以将满足条件的前几个数列出来,以此寻找解题思路。

一种简单的思路就是对于已经列出的数,我们依次去乘以3,5,7得到一组数 然后找出最小且还没有列出的数,加入到这个列表。然后重复上面的步骤: 乘以3,5,7,找出最小且还没有列出的数……这个方法的时间复杂度是O(n2 )。

这种思路存在一个问题,就是重复计算。比如对于上面那个表,我想计算下一个数, 那么我用3,5,7去乘以表中的每一个数,然后找出最小且没有用过的数。 可是像3*3,3*5,3*7,5*5,5*7等等都是已经计算过且已经用了的, 按照上面的算法就会不断地重复计算。那我们有没什么办法可以避免重复计算呢? 那就是将已经计算出来的数保存好,并且保持它们有序。为了避免出现先用3乘以5, 然后又用5去乘以3的这种情况出现(这样会使我们维护的数中出现重复), 我们可以用3个队列来维护这些数。第1个队列负责乘以3,第2个队列负责乘以5, 第3个队列负责乘以7。算法描述如下:

1. 初始化结果res=1和队列q3,q5,q7
2. 分别往q3,q5,q7插入1*3,1*5,1*7
3. 求出三个队列的队头元素中最小的那个x,更新结果res=x
4. 如果x在:q3中,那么从q3中移除x,并向q3,q5,q7插入3*x,5*x,7*xq5中,那么从q5中移除x,并向q5,q7插入5*x,7*xq7中,那么从q7中移除x,并向q7插入7*x
5. 重复步骤3-5,直到找到第k个满足条件的数

注意,当x出现在q5中,我们没往q3中插入3*x,那是因为这个数在q5中已经插入过了。

C++实现代码:

#include<iostream>
#include<queue>
using namespace std;int get_num(int k)
{if(k<=0)return 0;int res,cnt=1;queue<int> q3,q5,q7;q3.push(3);q5.push(5);q7.push(7);while(cnt<k){res=min(q3.front(),min(q5.front(),q7.front()));if(res==q3.front()){q3.pop();q3.push(3*res);q5.push(5*res);q7.push(7*res);}else if(res==q5.front()){q5.pop();q5.push(5*res);q7.push(7*res);}else if(res==q7.front()){q7.pop();q7.push(7*res);}cnt++;}return res;
}int main()
{cout<<get_num(10)<<endl;
}

转载于:https://www.cnblogs.com/wuchanming/p/4149208.html

careercup-数学与概率 7.7相关推荐

  1. 数学1——概率与数学期望

    数学1--概率与数学期望 本文作者frankchenfu,blogs网址http://www.cnblogs.com/frankchenfu/,转载请保留此文字. 1.什么是数学期望? 数学期望亦称期 ...

  2. python实现概率论与数理统计_《统计思维:程序员数学之概率统计》读书笔记

    更多 1.书籍信息 书名:Think Stats: Probability and Statistics for Programmers 译名:<统计思维:程序员数学之概率统计> 作者:A ...

  3. 《统计思维:程序员数学之概率统计》学习笔记 Chap.1-2

    最近在阅读Allen B. Downey所著的<统计思维:程序员数学之概率统计>,由于文章中大部分的函数操作都是基于作者自己写的模块thinkstats2,为了能够使用常用python库来 ...

  4. 机器学习中的数学:概率统计

    内容亮点 详解 6 大核心板块:概率思想.随机变量.统计推断.随机过程.采样理论.概率模型,筑牢机器学习核心基础. 教你熟练使用 Python 工具库:依托 NumPy.SciPy.Matplotli ...

  5. [资源下载]张宇老师讲授的数学视频(概率+高数+线代)

    张宇老师讲授的三套数学视频 最近发现有不少群友都在补数学的缺,原因是他们尝试学习机器学习的理论,却发现自己在微积分.概率统计.凸优化.线性代数方面的知识不够用,或者,准确地说,是-- 以前学的都还给数 ...

  6. 机器学习中的数学(五)--概率统计

    写在前面 <机器学习中的数学>系列主要列举了在机器学习中用到的较多的数学知识,包括微积分,线性代数,概率统计,信息论以及凸优化等等.本系列重在描述基本概念,并不在应用的方面的做深入的探讨, ...

  7. 程序员的数学 2 概率统计pdf

    下载地址: 网盘下载 内容简介  · · · · · · 本书沿袭<程序员的数学>平易近人的风格,用通俗的语言和具体的图表深入讲解程序员必须掌握的各类概率统计知识,例证丰富,讲解明晰,且提 ...

  8. 数学知识——概率统计(3):随机变量

    目录 写在前面 起源与发展 概率 基本计数原理 本质 1. 随机变量(random variable) 1.1 随机变量 1.2 随机变量三要素 2.分类 2.1 离散型随机变量 2.2 随机变量三要 ...

  9. “三门问题”:数学经典概率问题,用java代码求证

    趣味编程,java求证"三门问题" 三门问题,也称为蒙提霍尔问题(Monty Hall Problem). 题意如下: 假如你参加一档选秀节目,节目中一共有三道关闭着的门,其中一扇 ...

  10. 计算机专业考研数学考概率吗,数学专业考研容易吗

    数学专业考研比较难,数学类的研究生专业共有5个,分别是基础数学,应用数学,概率论与数理统计,计算数学,运筹学与控制论.每个专业的研究生都是不好考的. 基础数学 基础数学研究生考试科目:101思想政治理 ...

最新文章

  1. git.exe 启动 慢_拳头:今年将修复英雄联盟客户端 启动时间降到19秒
  2. web项目数据存入mysql数据库中文乱码问题
  3. routersploit 路由器漏洞检测及利用框架
  4. jmeter进行https协议的测试
  5. golang日志输出
  6. ArcGis Server开发Web GIS新手体验(二)
  7. Map 3D 2011 在线帮助真正在线了 :)
  8. AJ是什么牌子,AJ是什么意思,AJ鞋子价格多少一起来看一下
  9. Tapestry5之Application Module
  10. Linux下的TCP测试工具
  11. 苏宁易购实现逆势增长,但它的非电业务更超出意料
  12. 加密狗加密excel ,方法之 C#开发Excel自定义函数
  13. 编写一个函数,简单模拟微信发红包算法。
  14. pt-table-checksum 使用实践
  15. 在WinForm中回车键(enter)和Esc键的设置
  16. Oracle函数之单值函数
  17. 33个机器学习常用数据集
  18. java生成二维码,中间插入图片,以及二维码解析
  19. C语言if和汇编jcc程序对比,汇编 JCC指令表与笔记
  20. 数据结构课程设计(八)---家谱管理系统(十几个功能)

热门文章

  1. eleTree树形插件引入
  2. 微信浏览器中IOS12键盘回弹的问题
  3. 15款Cocos2d-x游戏源码
  4. 9、MySQL逻辑架构介绍
  5. Qt学习之路(10): Meta-Object系统
  6. 由浅入深学习Apache httpd原理与配置
  7. SOA面向服务架构——SOA的概念
  8. poj3159差分约束+栈实现的spfa+邻接链表
  9. 面试题 04.04. 检查平衡性
  10. C++数据结构与算法 竞赛树, 二叉搜索树