Ugly Numbers

2023-11-18

题目描述

Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, ... shows the first 10 ugly numbers. By convention, 1 is included. Given the integer n,write a program to find and print the n‘th ugly number.

输入

Each line of the input contains a postisive integer n (n <= 1500).Input is terminated by a line with n=0.

输出

For each line, output the n’th ugly number .:Don’t deal with the line with n=0.

样例输入

1290

样例输出

1210
解:
丑陋数是仅有素因子2、3、5的整数,1 * 2, 1 * 3, 1 * 5, 2 * 2, 2 * 3, 2 * 5……这样算下去,得到的是2, 3, 5, 4, 6, 10,而4应该排在5的前面,也就是说这样计算出来的值还要进行排序,感觉非常耗时间,怎么办呢?我们可以创建一个数组,把丑陋数的列表计算出来,然后通过输入值在数组中快速寻找出对应的值。我们得想办法进行动态排序,我们可以先设置3个变量来记录2的倍数、3的倍数、5的倍数的个数,将这些个数作为索引,找出丑陋数列表数组中对应的值,再乘以对应的2、3、5就可以得到现在需要插入列表的2的倍数、3的倍数、5的倍数的值,找到这三个值的最小的数,将这个数添加到数组的最后面,一直循环这个操作就可以实现动态排序了。可能我上面表达得不是很好,看代码应该就清楚了,代码如下:
#include <stdio.h>
#define MAXN 1500 + 10
int twoNum = 0, threeNum = 0, fiveNum = 0;
int ugly[MAXN];
 
void create()
{
    ugly[0] = 1;
    for (int i = 1; i < 1500; i++) {
        int min = ugly[twoNum] * 2, b = ugly[threeNum] * 3, c = ugly[fiveNum] * 5;
        if (b < min) {
            min = b;
        }
        if (c < min) {
            min = c;
        }
        ugly[i] = min;
        if (ugly[i] == ugly[twoNum] * 2) {
            twoNum++;
        }
        if (ugly[i] == ugly[threeNum] * 3) {
            threeNum++;
        }
        if (ugly[i] == ugly[fiveNum] * 5) {
            fiveNum++;
        }
    }
}
 
int main()
{
    create();
    int n;
    while (scanf("%d", &n) != EOF) {
        if (n == 0) {
            return 0;
        }
        printf("%d\n", ugly[n - 1]);
    }
    return 0;
}


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

Ugly Numbers 的相关文章

随机推荐

  • Feign原理 (图解)

    1 1 简介 Feign远程调用的 Feign远程调用 核心就是通过一系列的封装和处理 将以JAVA注解的方式定义的远程调用API接口 最终转换成HTTP的请求形式 然后将HTTP的请求的响应结果 解码成JAVA Bean 放回给调用者 F
  • namespace命令空间

    目录 1 解决什么问题 2 基本介绍 2 1 定义 2 2 应用场景 3 使用案例 4 资源配额 5 标签 5 1 定义 5 2 pod资源打标签 5 3 查看标签 1 解决什么问题 命令空间类似于C 中的命名空间 当用户数量较多的集群 才
  • 使用docker搭建jupyter notebook/jupyterlab

    说明 由于官方镜像实在是不怎么好用 所以我自己做了一个优化过的jupyter notebook的镜像 notebook hub 使用我这个镜像搭建容器非常简单 下面就基于这个notebook hub来进行搭建 关于notebook hub
  • hive 报system:java.io.tmpdir错误解决

    Exception in thread main java lang IllegalArgumentException java net URISyntaxException Relative path in absolute URI sy
  • 2. IDEA + maven + protobuf配置(on mac)

    1 絮絮叨叨 都说懒惰是人类进步的源泉 有时候想想还真就那么回事 学习了如何使用protoc命令编译 重度依赖IDEA且已经习惯了maven的我 就在想是否能在IDEA中一键编译 proto文件 2 vscode配置protobuf编辑环境
  • pyecharts实现电影数据分析可视化

    根据电影数据 使用pyecharts进行可视化分析 数据介绍 import pandas as pd data pd read csv 电影 csv data head 前5行数据如下 需要安装的python库 pip install pa
  • 2.晶晨A311D-编译Ubuntu/Debian固件

    上面是我的微信和QQ群 欢迎新朋友的加入 参考 https docs khadas com zh cn vim3 FenixScript html 编译环境 我重新安装了ubuntu20 安装软件包 配置环境 sudo apt get in
  • 【数据结构】排序(直接插入、折半插入、希尔、冒泡、快速、直接选择、堆、归并、基数排序)

    一 什么是排序 排序 将一组杂乱无章的数据按一定规律顺次排列起来 即 将无序序列的数据节点包含多个数据域 那么排序往往是针对其中某个域而言 二 排序方法的分类 1 按数据存储介质可分为 内部排序 数据量不大 数据在内存 无需内外存交换数据
  • SQL抽取数据脚本

    sp OutputData IF EXISTS SELECT 1 FROM sys objects o WHERE object id object id N sp OutputData AND OBJECTPROPERTY object
  • vue数据劫持 ajax,Vue视图更新原理 - 数据劫持,最小量更新和DIFF算法

    什么是数据劫持 加入有一个js文件内容如下 var obj x 100 y 200 Object defineProperties obj x set console log You gonna update x the vision wi
  • python smtp发送邮件 附件 中文名乱码 问题

    重点 mime add header Content Disposition attachment filename make header file name UTF 8 encode UTF 8 完整代码可以发送多个附件 import
  • 20220801:强改jar包的一下经历

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 改jar包内容 二 使用步骤 1 首先是修改的class文件 2 如何替换jar包中的class文件 总结 前言 目标是一个dubbo的服务 我们的工程引
  • VS2008错误Error spawning 'cmd.exe'的解决方法

    解决方法 In the Options go into Projects and Solutions gt VC Directories page and place this rows SystemRoot System32 System
  • Redisson配置类

    学习记录 Redisson配置类 Bean public RedissonClient redissonClient throws IOException ResourceLoader loader new DefaultResourceL
  • Dell台式机重装win 10系统之后开机报错

    电脑品牌 戴尔 报错信息 Hard disk dirve failure 硬盘驱动器故障 trick the F1 key to continue F2 to run the setup utility 报错原因 电脑一开机出现黑屏并出现H
  • Spring面向切面编程-AOP

    前言 在软件开发中 面向切面编程 Aspect Oriented Programming AOP 是一个非常重要的编程范式 Spring AOP是Spring框架提供的AOP实现 在Spring中使用AOP实现企业应用开发已经非常普遍 本文
  • 测试基础-静态白盒测试(检查代码)

    1 静态白盒测试 检查设计和代码 静态测试 测试非运行部分 检验和审查 白盒测试 访问代码 能够查看和审查 静态白盒测试 在不执行软件的条件下有条理地仔细审查软件设计 体系结构和代码 从而找出软件缺陷的过程 有时称为结构化分析 2 正式审查
  • yolov7运行自己的VOC格式数据集

    yolov7运行VOC格式数据集 代码下载 测试开发环境 使用自己的VOC格式数据集训练 修改配置文件yolov7 yaml 修改配置文件voc yaml VOC格式数据集转换COCO格式 开始训练 重头开始 fine train BUG
  • 【手写一个RPC框架】simpleRPC-03

    目录 前言 实现 项目创建 依赖配置 common service client server 文件结构 运行 本项目所有代码可见 https github com weiyu zeng SimpleRPC 前言 我们将新写一个服务接口 通
  • Ugly Numbers

    题目描述 Ugly numbers are numbers whose only prime factors are 2 3 or 5 The sequence 1 2 3 4 5 6 8 9 10 12 shows the first 1