hdu 1058 Humble Numbers

2023-11-02

Problem

acm.hdu.edu.cn/showproblem.php?pid=1058

题意

找出从小到大第 n 个因子(除了 1 和本身)只有 2、3、5、7 的数。即第 n 个 num = 2^a * 3^b * 5^c * 7^d 的数(据说叫丑数)。

分析

从 1 开始,乘2、3、5、7中的随便一个,就产生 4 个这样的数;从这 4 个数出发,分别乘 2、3、5、7,再产生更多的数…依此类推产生所有这样的数。

但要从小到大排序。可以想出,下一个最小的丑数肯定是某几个之前的丑数乘 2 或 3 或 5 或 7 产生的。

按上面的产生方法,每丑数乘 2 可以产生新的一个新的丑数,其它也是。

将丑数按升序存在一个数组 ugly [] 里,用 4 个变量 a、b、c、d 分别记录一个下标,表示 2、3、5、7 下一次要跟哪个之前的丑数相乘产生新丑数。

产生的 4 个新丑数就是:2 * ugly[a]、3 * ugly[b]、5 * ugly[c]、7 * ugly[d]。它们是可能的下一个最小的丑数。

从它们之间找那个最小的加到数组尾,然后判断是由哪个因子产生的,让它的下标加一(指向下一个还没跟它相乘产生新丑数的丑数)。

它们这些产生的新丑数中,可能有重复,所以可能一次要移动多个下标。

Source code

#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 5842;

int ugly[N+1] = {0, 1};

int main()
{
	for(int i=2,two=1,three=1,five=1,seven=1; i<=N; ++i)
	{
		ugly[i] = min(
			min(2 * ugly[two], 3 * ugly[three]),
			min(5 * ugly[five], 7 * ugly[seven])
		);
		// 可能新丑数有重复,不能加 else
		if(ugly[i] == 2 * ugly[two])
			++two;
		if(ugly[i] == 3 * ugly[three])
			++three;
		if(ugly[i] == 5 * ugly[five])
			++five;
		if(ugly[i] == 7 * ugly[seven])
			++seven;
	}
	for(int n; scanf("%d", &n), n; )
	{
		printf("The %d", n);
		if(n % 10 == 1 && n % 100 != 11)
			printf("st");
		else if(n % 10 == 2 && n % 100 != 12)
			printf("nd");
		else if(n % 10 == 3 && n % 100 != 13)
			printf("rd");
		else
			printf("th");
		printf(" humble number is %d.\n", ugly[n]);
	}
	return 0;
}
这居然是 dp…看来我对 dp 的理解还是太肤浅

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

hdu 1058 Humble Numbers 的相关文章

  • Visual Studios 2015 中的“恢复 NuGet 包”没有执行任何操作

    我将解决方案从 SVN 拉入 Visual Studios 2015 代码中的一些 使用 引用出现错误 因此我尝试在右键单击 解决方案 中的解决方案时运行 恢复 NuGet 包 选项探索者 这没有任何作用 我必须手动进入 nuget 管理器
  • C# 异步任务比同步慢

    你知道为什么同步斐波那契方法比异步 等待更快并且比异步任务更快吗 我在每个项目方法上都使用了异步 所以主要是这是一个非常糟糕的方法 Code static int FibonacciSync int number if number 0 r
  • Qt/c++ 随机字符串生成[重复]

    这个问题在这里已经有答案了 我正在创建一个应用程序 需要生成多个随机字符串 几乎就像一个由一定长度的 ASCII 字符组成的唯一 ID 这些字符混合有大写 小写 数字字符 有没有 Qt 库可以实现这一点 如果没有 在纯 C 中生成多个随机字
  • 头文件中实现的函数的静态与内联

    我想到的方式inline在 C 中用于链接 作用域 我把它放在同一个篮子里extern and static对于全局对象 通常 对于在头文件中实现的函数 我的首选解决方案是将其设为静态 In Foo h static void foo Do
  • C# 中类似图的实现

    所以我有一个对象 我们称之为 Head 它有一个对象列表 C C1 C2 C3 T T1 T2 和 M M1 M2 并且所有这些都是相互关联的 例如 Head gt C1 C2 C3 T1 T2 M1 M2 T1 gt C1 C2 T2 g
  • Winform DatagridView 数字列排序

    我只使用一个简单的 DataGridView 来保存一堆数据 有趣的是 我在特定列中有小数 但是当按小数列排序时 它的排序是错误的 例如 起始顺序可能是 0 56 3 45 500 89 20078 90 1 56 100 29 2 39
  • 从内存流播放视频文件

    只是好奇看看这是否可能 我有一个 Windows 应用程序 它从我的电脑上的 avi 文件读取所有字节 然后将其存储在 byte 中 现在我的内存中有 avi 文件 我想直接从内存将其加载到某种视频播放器控件中 我尝试过使用 wmplaye
  • 在 .NET Core 中从 HttpResponseMessage 转换为 IActionResult

    我正在将之前在 NET Framework 中编写的一些代码移植到 NET Core 我有这样的事情 HttpResponseMessage result await client SendAync request if result St
  • 如何使用 CUDA/Thrust 对两个数组/向量根据其中一个数组中的值进行排序

    这是一个关于编程的概念问题 总而言之 我有两个数组 向量 我需要对一个数组 向量进行排序 并将更改传播到另一个数组 向量中 这样 如果我对 arrayOne 进行排序 则对于排序中的每个交换 arrayTwo 也会发生同样的情况 现在 我知
  • 如何在 Visual Basic DLL 和 C++ DLL 之间创建隔离/免注册 COM?

    我必须在 C DLL 中使用 VB COM DLL 我弄清楚了如何从 C DLL 访问 VB COM DLL 并且它可以工作 现在我遇到了一个问题 我必须使用隔离的 COM 免注册 COM 因为我无法在必须使用它的每台 PC 上注册 DLL
  • C# 中的抽象类和接口类有什么不同?

    C 中的抽象类和接口类有什么不同 An 接口不是类 它只是一个contract定义了public一个类的成员must实施 抽象类只是一个类 您从中可以cannot创建一个实例 通常您会使用它来定义一个基类 该基类定义了一些virtual方法
  • std::make_pair 与浮点数组(float2,无符号整数)

    我有一个用 float2 unsigned int 对模板化的向量 例如 std vector
  • 如何在 C++ 和 QML 应用程序中使用 qrc?

    我在 Windows7 上用 c qnd Qt Creator QML 编写了 Qt Quick Desktop 应用程序 现在 我必须部署它 并且我需要隐藏 qml 文件和图像 意味着 将它们放入资源等中 我读到有一个很好的方法可以使用
  • ASP.net WebForms - 在标记中使用 GetRouteUrl

    我一直在尝试弄清楚如何将路由功能与 ASP net 4 0 WebForms 一起使用 我将一条路线添加到我的路线集合中 void Application Start RegisterRoutes RouteTable Routes voi
  • 本地时间的内存需要释放吗?

    void log time t current time 0 tm ptm localtime current stuf 只是想确定 我是否需要在方法结束时释放 tm 指针分配的内存 不 你不应该释放它 该结构是静态分配的 检查文档 htt
  • 如果finally 块包含await,为什么*有时*不会在ThreadAbortException 上执行?

    UPDATE 我不认为这个问题是重复的ThreadAbortException最后可以跳过吗 https stackoverflow com questions 18002668 can threadabortexception skip
  • 从 C# 调用时无法识别 Powershell 命令

    这是这个的延续Question https stackoverflow com questions 66280000 powershell object returns null 66280138 noredirect 1 comment1
  • 从具有相同属性的另一个对象创建对象

    我有一个 C 对象 可以说有 20 个属性 它是数据契约的一部分 我还有另一个具有类似属性的业务实体 我想从响应对象中填充该实体 除了将一个对象的每个属性分配给另一个对象的相应属性之外 还有其他方法可以做到这一点吗 是的 看看自动映射器 h
  • 在特定线程上运行工作

    我想要一个特定的线程 任务队列并在该单独的线程中处理任务 应用程序将根据用户的使用情况创建任务并将其排队到任务队列中 然后单独的线程处理任务 即使队列为空 保持线程活动并使用它来处理排队任务也至关重要 我尝试过几种实现TaskSchedul
  • 创建进程默认浏览器

    我目前正在使用 ShellExecute 打开 在用户浏览器中打开 URL 但在 Win7 和 Vista 中遇到了一些麻烦 因为该程序作为服务运行提升 我想获取线程 id 因此 ShellExecute 无法获取线程 id 因此我开始使用

随机推荐

  • WPF DataGrid 导出Excel

    region Excel导出 private void btnExportExcel Click object sender RoutedEventArgs e Export this dgvList XX信息查询列表 public voi
  • STM32 F1,F4,CAN多字节发送和接收

    一 简介 CAN的基础知识在这里不做过多介绍 其他网站上讲解的很基础 因为CAN一次性只能接收1字节8位 所以在这里只介绍怎样让CAN能像串口那样一次性接收非常多的位 亲测有效 具体先看效果图 在这里我的实现是通过两块STM32板子 可以是
  • 【mac】mac鼠标指针跟随很慢的问题

    使用时感觉鼠标指针跟随太慢 在系统偏好设置里面将鼠标跟随速度调到最大 还是感觉很慢 后来在网上找到了一个通过命令行改全局配置的方式调快跟随速度 具体方法如下 可以先查看一下当前值 打开终端 输入命令 lcc localhost defaul
  • html的实体字符,h5展示特殊符号<>

    前言 在 HTML 中 某些字符是预留的 不能使用小于号 lt 和大于号 gt 这是因为浏览器会误认为它们是标签 比如 这样是不行的 p lt p 比如用实体字符 p lt p HTML 中有用的字符实体 注释 实体名称对大小写敏感 显示结
  • 单链表的创建、单链表的删除、单链表的插入(数据结构)

    1 创建一个超级简单的单链表 include
  • 用HttpClient抓取人人网高校数据库(省,高校,院系三级级联)--更新1

    更新备注 将src文件改成了一个完整的项目 解压后可以直接导入到Eclipse中去 省去大家配置 项目乱码请改项目属性为GBK 另外 如果你要登陆人人网 的话 需要申请一个人人网账号 这里提供公用的 lei d0809 gmail com
  • matlab画三维、二维动态曲线

    matlab画三维 二维动态曲线 画三维曲线动图 xlabel X m ylabel Y m zlabel Z m grid on for i 1 length x 1 axis 0 05 2 5 0 05 5 0 1 0 1 line x
  • Matlab—频谱分析作图

    clf fs 50 采样频率 每秒钟采样多少个点 N 60 采样点数量 T N fs 采样时间 n 0 N 1 t n fs 时间序列 f n fs N 频率序列 y1 10 sin 2 pi 15 t y2 10 sin 2 pi 20
  • 硬件第二节 MOS管电路工作原理及详解

    文章目录 一 MOS管画法辨认 1 1 辨认MOS管 二 MOS管使用 2 1 作为开关管 2 1 1 导通条件 2 1 2实例 三 如何选择MOS管 3 1 MOS管需要注意的几个参数 3 1 1 选择PMOS还是NMOS 3 1 2 电
  • Proxmox VE(PVE) 进行网卡直通

    文章目录 我的设备 介绍 添加CPU支持 开启iommu 查询网卡信息 Intel CPU AMD CPU 新增所需模块 添加PCI设备 命令模式添加 web页面模式添加 验证IOMMU有效 IOMMU中断重映射 查看中断重映射 启用中断重
  • 用函数输出星星

    2013 11 10 11 54 0人阅读 评论 0 收藏 编辑 删除 01 02 程序的版权和版本声明部分 03 Copyright c 2013 烟台大学计算机学院 04 All rights reserved 05 文件名称 test
  • 静态测试和动态测试

    静态测试 不运行被测试的软件系统 而是采用其他手段和技术对被测试软件进行检测的一种测试技术 代码走读 文档评审 程序分析等 静态测试常用技术 静态分析技术 1 定义 一种不通过执行程序而分析程序执行的技术 2 功能 检查软件的表示和描述是否
  • flask获取post参数_Flask教程2:模板

    什么是模板 模板负责定义页面的显示样式 与应用的逻辑相互独立 在Flask中 模板放在templates文件夹 是单独的html文件 编写一个模板 在app文件夹内创建templates文件夹 并新建index html文件 用来显示用户的
  • sqlilabs第26a

    sqlilabs第26a 一 手注 有错误希望师傅们指出 一 手注 直接看源码 无回显 我使用boolean盲注 过滤了and 空格 注释 空格可以通过 或者 0a绕过 and可以用 或者双写绕过 但这道题 不行 注释使用 1 1闭合 判断
  • Apache Druid远程代码执行漏洞复现(CVE-2021-25646)

    Apache Druid远程代码执行漏洞复现 CVE 2021 25646 漏洞描述 Apache Druid包括执行用户提供的JavaScript的功能嵌入在各种类型请求中的代码 此功能在用于高信任度环境中 默认已被禁用 但是 在Drui
  • 39天前端入门教程,免费领!!还送原创书籍+限量鼠标垫

    39天前端入门教程课程内容 福利 课程包含完整视频 笔记 源码 开发工具 39天前端入门教程 免费领 还送原创书籍 限量鼠标垫 关注 黑马程序员视频库 回复518 即可免费领取哦
  • mysql对姓名、手机号、身份证号做脱敏处理

    SELECT phone手机号脱敏处理 IF phone CONCAT LEFT phone 3 RIGHT phone 4 AS dephone cardno身份证号脱敏处理 IF cardno CONCAT LEFT cardno 3
  • 小甲鱼python视频xxoo爬虫代码改进--煎蛋网

    2020 7 31 今天学习得是关于小甲鱼得python课程 根据这个课程也确确实实得学到了不少东西 所以希望大家也可以一起去学习 下面是我在小甲鱼上课改造之后得代码 这个课程是在b站上看的 号码是 av27789609 这个是第五十节左右
  • Flutter入门学习(二)第一个Flutter应用

    Flutter 开发环境搭建好之后 创建第一个Flutter应用 使用VSCode来创建第一个Flutter应用 打开 VSCode 后 Cmd Shift p 选择 Flutter New Project 即可创建 如下图 如果右下角报找
  • hdu 1058 Humble Numbers

    Problem acm hdu edu cn showproblem php pid 1058 题意 找出从小到大第 n 个因子 除了 1 和本身 只有 2 3 5 7 的数 即第 n 个 num 2 a 3 b 5 c 7 d 的数 据说