题目:我们把只包含因子
2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第1500个丑数。
思路:
我们可以创建一个数组,里面的数字是排好序的丑数。里面的每一个丑数是前面的丑数乘以2、3或者5得到的。
这种思路的关键在于怎样确保数组里面的丑数是排好序的。我们假设数组中已经有若干个丑数,排好序后存在数组中。
我们把现有的最大丑数记做M。现在我们来生成下一个丑数,该丑数肯定是前面某一个丑数乘以2、3或者5的结果。
我们首先考虑把已有的每个丑数乘以2。在乘以2的时候,能得到若干个结果小于或等于M的。由于我们是按照顺序生成的,
小于或者等于M肯定已经在数组中了,我们不需再次考虑;我们还会得到若干个大于M的结果,但我们只需要第一个大于M的结果,
因为我们希望丑数是按从小到大顺序生成的,其他更大的结果我们以后再说。我们把得到的第一个乘以2后大于M的结果,记为M2
。同样我们把已有的每一个丑数乘以3和5,能得到第一个大于M的结果M3和M5。那么下一个丑数应该是M2、M3和M5三个数的最小者。
前面我们分析的时候,提到把已有的每个丑数分别都乘以2、3和5,事实上是不需要的,因为已有的丑数是按顺序存在数组中的。
对乘以2而言,肯定存在某一个丑数T2,排在它之前的每一个丑数乘以2得到的结果都会小于已有最大的丑数,
在它之后的每一个丑数乘以2得到的结果都会太大。我们只需要记下这个丑数的位置,同时每次生成新的丑数的时候,
去更新这个T2。对乘以3和5而言,存在着同样的T3和T5。
#include<stdio.h>
#include<stdlib.h>
int min(int number1,int number2,int number3)
{
int min=(number1<number2)?number1:number2;
min=(min<number3)?min:number3;
return min;
}
int getUglyNumber(int index)
{
if(index<=0)
return 0;
int *pUglyNumbers=(int*)malloc(index*sizeof(int));
pUglyNumbers[0]=1;
int nextUglyIndex=1;
int *pMultiply2=pUglyNumbers;
int *pMultiply3=pUglyNumbers;
int *pMultiply5=pUglyNumbers;
while(nextUglyIndex<index)
{
int min=min(*pMultiply2*2,*pMultiply3*3,*pMultiply5*5);
pUglyNumbers[nextUglyIndex]=min;
while(*pMultiply2*2<=pUglyNumbers[nextUglyIndex]);
++pMultiply2;
while(*pMultiply3*3<=pUglyNumbers[nextUglyIndex]);
++pMultiply3;
while(*pMultiply5*5<=pUglyNumbers[nextUglyIndex]);
++pMultiply5;
++nextUglyIndex;
}
int ugly=pUglyNumbers[nextUglyIndex-1];
free(pUglyNumbers);
return ugly;
}
int main()
{
int ugly=getUglyNumber(1500);
printf("%d",ugly);
return 0;
}
结果:
分享到:
相关推荐
丑数,又称“好看数”或“优美数”,在数学领域中是指仅包含质因数2、3和5的正整数。这类数的特点是它们可以表示为2的幂次、3的幂次和5的幂次的乘积。丑数的概念在计算效率优化和数学游戏中有广泛应用,因为它们具有...
在计算机科学中,"丑数"(也称为"好数")是指仅包含质因数2、3和5的正整数。它们是能够被这三个质数的任意次幂整除的数字。例如,1、2、3、4、5、6、8、9、10、12等都是丑数。本项目是用C语言实现的一个程序,用于...
这个特定的问题,"丑数(Python)",要求编写一个Python程序来找到第N个丑数,即那些仅由质因子2、3和5组成的正整数。 丑数的概念是基于质数的乘积。质数是大于1且只有1和它自身两个正因数的自然数。题目中提到,1...
丑数,又称“不规则数”,是指一个正整数,其所有的质因数仅包含2、3和5。这个问题要求我们找到第1500个丑数。在数学上,解决此类问题通常需要构建一种算法,它能有效地生成丑数序列,并在序列中找到特定位置的数。 ...
使用Java编写代码,判断一个给定的数是否为丑数。
/* 定义:因子只包含2/3/5的数字为丑数 比如:1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 这就是前11个,不失一般性,把1也算做一个 写个程序输出第1500个丑数 zhouqinfeng@yahoo.cn */
指定一个下标(第n个),输出第n个丑数。例如n=10,返回的结果是1,2,3,4,5,6,8,9,10,12数列中的12
丑数,又称不规则数,是指只包含质因数2、3和5的正整数。在编程领域,我们经常需要编写程序来判断一个数是否为丑数,或者找到序列中的第n个丑数。本篇文章将深入探讨丑数的概念,以及如何用C语言实现丑数的相关算法...
丑数,又称“不规则数”,是指只含有因子2、3和5的正整数。在C语言中,我们可以编写程序来判断一个数是否为丑数,并找出前n个丑数。以下是对“丑数实验报告C语言.docx”文件中涉及的知识点的详细解释: 1. **丑数...
《丑数:最小堆的应用与理解》 在编程领域,我们常常遇到一些有趣的问题,比如“丑数”问题。丑数,顾名思义,是指那些由质因子2、3和5组成的正整数。这类问题在算法竞赛如LeetCode等平台中常被用来考察程序员对...
丑数c语言 丑数c语言 丑数c语言
在C语言编程中,"丑数"通常是指那些只包含质因子2、3和5的正整数。例如,1、2、3、4、5、6、8、9、10、12等都是丑数,因为它们都可以被2、3或5的幂次整除。本编程题的目标是设计一个程序,用于找出并打印指定范围内...
标题中的“python-leetcode面试题解之第263题丑数.zip”表明这是一个关于Python编程语言在LeetCode面试中的应用,具体聚焦于解决第263题——丑数的问题。LeetCode是一个在线平台,提供了大量的编程题目,帮助开发者...
标题中的“丑数II”指的是LeetCode第264题,这是一个关于算法和数学的问题,主要涉及Python编程语言。在面试中,此类问题通常用来测试应聘者的编程技巧、算法理解和数学逻辑。丑数(也称为“不完美数”)是指只包含...
丑数,又称“丑陋数”,是指一个正整数,其所有的质因数仅包含2、3和5这三个数字。在C语言中,求解第n个丑数是常见的算法问题,可以有多种解决方法,这里主要讨论两种不同的实现方式。 **算法1:逐个判断法** 这种...
丑数,又称Humble Number,是指一个正整数只包含质因子2、3和5,也就是说它的质因数只能是2、3和5。例如,6和8都是丑数,因为它们可以分解为2×3和2×2×2。但是,7和14不是丑数,因为它们包含其他质因子。习惯上,...
一段很经典的代码,希望给大家能带来帮助!
丑数.md
丑数c语言